rightsize 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +255 -0
- package/dist/backend-docker/backend.d.ts +53 -0
- package/dist/backend-docker/backend.d.ts.map +1 -0
- package/dist/backend-docker/backend.js +336 -0
- package/dist/backend-docker/backend.js.map +1 -0
- package/dist/backend-docker/client.d.ts +82 -0
- package/dist/backend-docker/client.d.ts.map +1 -0
- package/dist/backend-docker/client.js +190 -0
- package/dist/backend-docker/client.js.map +1 -0
- package/dist/backend-docker/frames.d.ts +44 -0
- package/dist/backend-docker/frames.d.ts.map +1 -0
- package/dist/backend-docker/frames.js +105 -0
- package/dist/backend-docker/frames.js.map +1 -0
- package/dist/backend-docker/index.d.ts +5 -0
- package/dist/backend-docker/index.d.ts.map +1 -0
- package/dist/backend-docker/index.js +20 -0
- package/dist/backend-docker/index.js.map +1 -0
- package/dist/backend-docker/json.d.ts +13 -0
- package/dist/backend-docker/json.d.ts.map +1 -0
- package/dist/backend-docker/json.js +47 -0
- package/dist/backend-docker/json.js.map +1 -0
- package/dist/backend-docker/labels.d.ts +11 -0
- package/dist/backend-docker/labels.d.ts.map +1 -0
- package/dist/backend-docker/labels.js +13 -0
- package/dist/backend-docker/labels.js.map +1 -0
- package/dist/backend-docker/port-conflict.d.ts +9 -0
- package/dist/backend-docker/port-conflict.d.ts.map +1 -0
- package/dist/backend-docker/port-conflict.js +12 -0
- package/dist/backend-docker/port-conflict.js.map +1 -0
- package/dist/backend-docker/provider.d.ts +22 -0
- package/dist/backend-docker/provider.d.ts.map +1 -0
- package/dist/backend-docker/provider.js +36 -0
- package/dist/backend-docker/provider.js.map +1 -0
- package/dist/backend-msb/backend.d.ts +169 -0
- package/dist/backend-msb/backend.d.ts.map +1 -0
- package/dist/backend-msb/backend.js +664 -0
- package/dist/backend-msb/backend.js.map +1 -0
- package/dist/backend-msb/commands.d.ts +28 -0
- package/dist/backend-msb/commands.d.ts.map +1 -0
- package/dist/backend-msb/commands.js +67 -0
- package/dist/backend-msb/commands.js.map +1 -0
- package/dist/backend-msb/exec-tunnel.d.ts +33 -0
- package/dist/backend-msb/exec-tunnel.d.ts.map +1 -0
- package/dist/backend-msb/exec-tunnel.js +163 -0
- package/dist/backend-msb/exec-tunnel.js.map +1 -0
- package/dist/backend-msb/follow-replay.d.ts +14 -0
- package/dist/backend-msb/follow-replay.d.ts.map +1 -0
- package/dist/backend-msb/follow-replay.js +20 -0
- package/dist/backend-msb/follow-replay.js.map +1 -0
- package/dist/backend-msb/image-cache.d.ts +25 -0
- package/dist/backend-msb/image-cache.d.ts.map +1 -0
- package/dist/backend-msb/image-cache.js +27 -0
- package/dist/backend-msb/image-cache.js.map +1 -0
- package/dist/backend-msb/index.d.ts +6 -0
- package/dist/backend-msb/index.d.ts.map +1 -0
- package/dist/backend-msb/index.js +21 -0
- package/dist/backend-msb/index.js.map +1 -0
- package/dist/backend-msb/invoke.d.ts +24 -0
- package/dist/backend-msb/invoke.d.ts.map +1 -0
- package/dist/backend-msb/invoke.js +73 -0
- package/dist/backend-msb/invoke.js.map +1 -0
- package/dist/backend-msb/ls-json.d.ts +23 -0
- package/dist/backend-msb/ls-json.d.ts.map +1 -0
- package/dist/backend-msb/ls-json.js +113 -0
- package/dist/backend-msb/ls-json.js.map +1 -0
- package/dist/backend-msb/network-links.d.ts +7 -0
- package/dist/backend-msb/network-links.d.ts.map +1 -0
- package/dist/backend-msb/network-links.js +31 -0
- package/dist/backend-msb/network-links.js.map +1 -0
- package/dist/backend-msb/platform.d.ts +29 -0
- package/dist/backend-msb/platform.d.ts.map +1 -0
- package/dist/backend-msb/platform.js +128 -0
- package/dist/backend-msb/platform.js.map +1 -0
- package/dist/backend-msb/port-conflict.d.ts +10 -0
- package/dist/backend-msb/port-conflict.d.ts.map +1 -0
- package/dist/backend-msb/port-conflict.js +16 -0
- package/dist/backend-msb/port-conflict.js.map +1 -0
- package/dist/backend-msb/provider.d.ts +10 -0
- package/dist/backend-msb/provider.d.ts.map +1 -0
- package/dist/backend-msb/provider.js +40 -0
- package/dist/backend-msb/provider.js.map +1 -0
- package/dist/backend-msb/provisioner.d.ts +19 -0
- package/dist/backend-msb/provisioner.d.ts.map +1 -0
- package/dist/backend-msb/provisioner.js +332 -0
- package/dist/backend-msb/provisioner.js.map +1 -0
- package/dist/backend-msb/reaper.d.ts +10 -0
- package/dist/backend-msb/reaper.d.ts.map +1 -0
- package/dist/backend-msb/reaper.js +73 -0
- package/dist/backend-msb/reaper.js.map +1 -0
- package/dist/core/backend.d.ts +98 -0
- package/dist/core/backend.d.ts.map +1 -0
- package/dist/core/backend.js +2 -0
- package/dist/core/backend.js.map +1 -0
- package/dist/core/backends.d.ts +37 -0
- package/dist/core/backends.d.ts.map +1 -0
- package/dist/core/backends.js +127 -0
- package/dist/core/backends.js.map +1 -0
- package/dist/core/cleanup.d.ts +37 -0
- package/dist/core/cleanup.d.ts.map +1 -0
- package/dist/core/cleanup.js +86 -0
- package/dist/core/cleanup.js.map +1 -0
- package/dist/core/errors.d.ts +51 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +66 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/free-ports.d.ts +23 -0
- package/dist/core/free-ports.d.ts.map +1 -0
- package/dist/core/free-ports.js +63 -0
- package/dist/core/free-ports.js.map +1 -0
- package/dist/core/generic-container.d.ts +145 -0
- package/dist/core/generic-container.d.ts.map +1 -0
- package/dist/core/generic-container.js +385 -0
- package/dist/core/generic-container.js.map +1 -0
- package/dist/core/model.d.ts +60 -0
- package/dist/core/model.d.ts.map +1 -0
- package/dist/core/model.js +2 -0
- package/dist/core/model.js.map +1 -0
- package/dist/core/mountable-file.d.ts +25 -0
- package/dist/core/mountable-file.d.ts.map +1 -0
- package/dist/core/mountable-file.js +64 -0
- package/dist/core/mountable-file.js.map +1 -0
- package/dist/core/network.d.ts +58 -0
- package/dist/core/network.d.ts.map +1 -0
- package/dist/core/network.js +84 -0
- package/dist/core/network.js.map +1 -0
- package/dist/core/run-id.d.ts +18 -0
- package/dist/core/run-id.d.ts.map +1 -0
- package/dist/core/run-id.js +18 -0
- package/dist/core/run-id.js.map +1 -0
- package/dist/core/wait.d.ts +59 -0
- package/dist/core/wait.d.ts.map +1 -0
- package/dist/core/wait.js +239 -0
- package/dist/core/wait.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/arango.d.ts +14 -0
- package/dist/modules/arango.d.ts.map +1 -0
- package/dist/modules/arango.js +37 -0
- package/dist/modules/arango.js.map +1 -0
- package/dist/modules/clickhouse.d.ts +37 -0
- package/dist/modules/clickhouse.d.ts.map +1 -0
- package/dist/modules/clickhouse.js +69 -0
- package/dist/modules/clickhouse.js.map +1 -0
- package/dist/modules/flink.d.ts +65 -0
- package/dist/modules/flink.d.ts.map +1 -0
- package/dist/modules/flink.js +125 -0
- package/dist/modules/flink.js.map +1 -0
- package/dist/modules/floci.d.ts +46 -0
- package/dist/modules/floci.d.ts.map +1 -0
- package/dist/modules/floci.js +62 -0
- package/dist/modules/floci.js.map +1 -0
- package/dist/modules/index.d.ts +31 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +31 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/kafka.d.ts +11 -0
- package/dist/modules/kafka.d.ts.map +1 -0
- package/dist/modules/kafka.js +41 -0
- package/dist/modules/kafka.js.map +1 -0
- package/dist/modules/keycloak.d.ts +40 -0
- package/dist/modules/keycloak.d.ts.map +1 -0
- package/dist/modules/keycloak.js +67 -0
- package/dist/modules/keycloak.js.map +1 -0
- package/dist/modules/mariadb.d.ts +56 -0
- package/dist/modules/mariadb.d.ts.map +1 -0
- package/dist/modules/mariadb.js +89 -0
- package/dist/modules/mariadb.js.map +1 -0
- package/dist/modules/memcached.d.ts +24 -0
- package/dist/modules/memcached.d.ts.map +1 -0
- package/dist/modules/memcached.js +105 -0
- package/dist/modules/memcached.js.map +1 -0
- package/dist/modules/mongodb.d.ts +19 -0
- package/dist/modules/mongodb.d.ts.map +1 -0
- package/dist/modules/mongodb.js +69 -0
- package/dist/modules/mongodb.js.map +1 -0
- package/dist/modules/mysql.d.ts +61 -0
- package/dist/modules/mysql.d.ts.map +1 -0
- package/dist/modules/mysql.js +101 -0
- package/dist/modules/mysql.js.map +1 -0
- package/dist/modules/neo4j.d.ts +60 -0
- package/dist/modules/neo4j.d.ts.map +1 -0
- package/dist/modules/neo4j.js +83 -0
- package/dist/modules/neo4j.js.map +1 -0
- package/dist/modules/pinot.d.ts +30 -0
- package/dist/modules/pinot.d.ts.map +1 -0
- package/dist/modules/pinot.js +49 -0
- package/dist/modules/pinot.js.map +1 -0
- package/dist/modules/postgres.d.ts +29 -0
- package/dist/modules/postgres.d.ts.map +1 -0
- package/dist/modules/postgres.js +73 -0
- package/dist/modules/postgres.js.map +1 -0
- package/dist/modules/rabbitmq.d.ts +46 -0
- package/dist/modules/rabbitmq.d.ts.map +1 -0
- package/dist/modules/rabbitmq.js +68 -0
- package/dist/modules/rabbitmq.js.map +1 -0
- package/dist/modules/redis.d.ts +15 -0
- package/dist/modules/redis.d.ts.map +1 -0
- package/dist/modules/redis.js +24 -0
- package/dist/modules/redis.js.map +1 -0
- package/dist/modules/redpanda.d.ts +27 -0
- package/dist/modules/redpanda.d.ts.map +1 -0
- package/dist/modules/redpanda.js +58 -0
- package/dist/modules/redpanda.js.map +1 -0
- package/dist/modules/spring-cloud-config.d.ts +18 -0
- package/dist/modules/spring-cloud-config.d.ts.map +1 -0
- package/dist/modules/spring-cloud-config.js +28 -0
- package/dist/modules/spring-cloud-config.js.map +1 -0
- package/dist/modules/wiremock.d.ts +21 -0
- package/dist/modules/wiremock.d.ts.map +1 -0
- package/dist/modules/wiremock.js +32 -0
- package/dist/modules/wiremock.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/backend-msb/backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5G,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,yBAAyB,GAAG,OAAO,CAAC,CAAC,0BAA0B;AACrE,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC7C,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,6EAA6E;AAC7E,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,yBAA0B,SAAQ,KAAK;IACtB;IAArB,YAAqB,MAAc;QACjC,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QAD7B,WAAM,GAAN,MAAM,CAAQ;IAEnC,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,SAAS,gBAAgB,CAAC,OAAe,EAAE,IAAuB,EAAE,SAAiB;IACnF,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,SAAS,yBAAyB,CAAC,CAAC,CAAC;QAC7G,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,WAAW,CAAC,IAAI,YAAY,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,uEAAuE;QACvE,gCAAgC;QAChC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrG,OAAO;YACT,CAAC;YACD,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;8BAE8B;AAC9B,SAAS,YAAY,CAAC,IAA0B;IAC9C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,IAAkB,CAAC;QAClC,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC;YAC1B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,6BAA6B,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,4CAA4C,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3G,CAAC;AAqBD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,MAA6B,EAAE,IAAc;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,aAAa;IAaK;IAZ7B,kHAAkH;IACzG,IAAI,GAAG,cAAc,CAAC;IACtB,sBAAsB,GAAG,KAAK,CAAC;IAEvB,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzC,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAClD,2EAA2E;IAC3E,qEAAqE;IACrE,uEAAuE;IACvE,iEAAiE;IACzD,eAAe,CAAqB;IAE5C,YAA6B,cAA+B;QAA/B,mBAAc,GAAd,cAAc,CAAiB;QAC1D,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE;YACJ,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC3B,CAAC,EACD,GAAG,EAAE;YACH,gEAAgE;YAChE,iEAAiE;YACjE,wCAAwC;QAC1C,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAmB;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACxG,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,KAAK,CAAC,MAAqB;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,YAAY,CAAC,gCAAgC,MAAM,CAAC,EAAE,sCAAsC,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,WAAmB,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,yBAAyB,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QAC7B,CAAC;QACD,MAAM,IAAI,GAAyB,MAAM,MAAM,CAC7C,OAAO,EACP,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAC1C,eAAe,CAChB,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,MAAM,YAAY,yBAAyB,CAAC,EAAE,CAAC;gBACnD,MAAM,MAAM,CAAC;YACf,CAAC;YACD,MAAM,IAAI,YAAY,CACpB,uBAAuB,MAAM,CAAC,EAAE,sDAAsD;gBACpF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,oDAAoD,YAAY,CAAC,IAAI,CAAC,IAAI;gBAC/F,4FAA4F;gBAC5F,4FAA4F;gBAC5F,+CAA+C,WAAW,0BAA0B,MAAM,CAAC,MAAM,EAAE,CACtG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,MAAqB,EAAE,KAAkB;QAC/E,wEAAwE;QACxE,6BAA6B;QAC7B,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;QAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACtG,wEAAwE;QACxE,0EAA0E;QAC1E,uEAAuE;QACvE,wEAAwE;QACxE,qEAAqE;QACrE,oDAAoD;QACpD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAE1D,IAAI,MAA2C,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,yBAAyB,CAAC;QACxD,SAAS,CAAC;YACR,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,qBAAqB,CAC7B,uBAAuB,MAAM,CAAC,EAAE,gCAAgC,MAAM,EAAE,CACzE,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,YAAY,CACpB,uBAAuB,MAAM,CAAC,EAAE,iBAAiB,MAAM,CAAC,IAAI,IAAI,SAAS,oBAAoB;oBAC3F,qEAAqE,MAAM,EAAE,CAChF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,IAAI,YAAY,CACpB,WAAW,MAAM,CAAC,EAAE,iCAAiC,yBAAyB,GAAG,IAAI,WAAW;oBAC9F,4FAA4F;oBAC5F,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAqB;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,CAAC;QACjC,yEAAyE;QACzE,uEAAuE;QACvE,mEAAmE;QACnE,mEAAmE;QACnE,wEAAwE;QACxE,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,uEAAuE;QACvE,kEAAkE;QAClE,2BAA2B;QAC3B,EAAE;QACF,mEAAmE;QACnE,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,uEAAuE;QACvE,qEAAqE;QACrE,uEAAuE;QACvE,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC3E,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,WAAW,EAAE,EAAE;gBAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,6BAA6B,CAAC,CAAC;gBAClF,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;oBACzB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAqB;QAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,OAAe;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;QACxE,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAqB,EAAE,GAA0B;QAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,IAAI,CAAC,MAAqB;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;IACtF,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,UAAU,CAAC,MAAqB,EAAE,QAAgC;QACtE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3G,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,EAAE;YACrD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrB,SAAS,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,uEAAuE;QACvE,4DAA4D;QAC5D,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAEtB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,YAAuC,CAAC;QAE5C,MAAM,aAAa,GAAG,KAAK,IAAmB,EAAE;YAC9C,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,UAAU,CAAC;YACjB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1F,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;YAC5C,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;gBACrF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1B,MAAM,aAAa,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QACF,YAAY,GAAG,WAAW,EAAE,CAAC;QAE7B,OAAO;YACL,KAAK,EAAE,KAAK,IAAmB,EAAE;gBAC/B,cAAc,GAAG,IAAI,CAAC;gBACtB,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,UAAU,CAAC;gBACjB,MAAM,YAAY,CAAC;gBACnB,qEAAqE;gBACrE,mEAAmE;gBACnE,mEAAmE;gBACnE,iEAAiE;YACnE,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACK,mBAAmB,CACzB,OAAe,EACf,MAAqB,EACrB,QAAgC;QAEhC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,MAAM,UAAU,GAAG,CAAC,KAAK,IAAmB,EAAE;YAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,SAAS,CAAC;gBACR,IAAI,cAAc,EAAE,CAAC;oBACnB,OAAO,CAAC,6DAA6D;gBACvE,CAAC;gBACD,IAAI,OAAgB,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;oBACpE,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;wBACtB,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9E,CAAC;oBACD,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;oBAC9F,OAAO;gBACT,CAAC;gBAED,IAAI,IAAY,CAAC;gBACjB,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxC,sEAAsE;gBACtE,mEAAmE;gBACnE,qEAAqE;gBACrE,mEAAmE;gBACnE,sEAAsE;gBACtE,kEAAkE;gBAClE,qEAAqE;gBACrE,mEAAmE;gBACnE,sDAAsD;gBACtD,IAAI,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;oBACpD,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,SAAS;gBACX,CAAC;gBACD,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtE,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;gBACjG,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,IAAI,cAAc,EAAE,CAAC;wBACnB,OAAO;oBACT,CAAC;oBACD,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC;gBAC/B,CAAC;gBACD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC7C,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO;YACL,KAAK,EAAE,KAAK,IAAmB,EAAE;gBAC/B,cAAc,GAAG,IAAI,CAAC;gBACtB,MAAM,UAAU,CAAC;YACnB,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,mBAAmB,CAC/B,OAAe,EACf,EAAU,EACV,SAAiB,EACjB,QAAgC,EAChC,gBAA+B;QAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gCAAgC,CAAC;QAC/D,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,SAAS,CAAC;YACR,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;gBAC9E,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,gBAAgB,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBACjD,MAAM;gBACR,CAAC;gBACD,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,oEAAoE;QACpE,sEAAsE;QACtE,wEAAwE;QACxE,0BAA0B;QAC1B,IAAI,SAAS,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YACxE,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QACpC,8EAA8E;IAChF,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QACpC,8DAA8D;IAChE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CAAC,MAAqB,EAAE,KAAiC;QAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACpC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,yBAAyB,CACjC,mDAAmD,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EACxE,IAAI,CAAC,IAAI,EACT,qDAAqD,CACtD,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,IAAI,WAAW,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,YAAY,CAAC,2CAA2C,MAAM,CAAC,EAAE,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,EAAU;QACpB,sEAAsE;QACtE,gEAAgE;QAChE,wEAAwE;QACxE,mEAAmE;QACnE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QACD,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,sGAAsG;IACtG,KAAK,CAAC,YAAY;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;QACxE,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,IAAY;QAClD,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ContainerSpec } from "../core/model.js";
|
|
2
|
+
/**
|
|
3
|
+
* Pure msb CLI argv construction. Every spelling here was checked against the
|
|
4
|
+
* real `msb` binary, not guessed from `--help` text alone. ATTACHED mode (no
|
|
5
|
+
* `-d`) is the whole ballgame: `msb run -d` boots the microVM but never runs
|
|
6
|
+
* the image's own ENTRYPOINT/CMD, only attached mode does — see
|
|
7
|
+
* `MsbCliBackend.start` for the supervision this forces.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MsbCommands: {
|
|
10
|
+
run(spec: ContainerSpec): string[];
|
|
11
|
+
exec(name: string, cmd: readonly string[]): string[];
|
|
12
|
+
execStream(name: string, cmd: readonly string[]): string[];
|
|
13
|
+
logs(name: string): string[];
|
|
14
|
+
followLogs(name: string): string[];
|
|
15
|
+
stop(name: string): string[];
|
|
16
|
+
rm(name: string): string[];
|
|
17
|
+
ls(): string[];
|
|
18
|
+
/**
|
|
19
|
+
* `msb image remove <reference>` deletes one cached image's entry (manifest
|
|
20
|
+
* + layer bookkeeping) so the next run/pull re-fetches it from scratch.
|
|
21
|
+
* Scoped to the single image reference; never touches sandbox state or any
|
|
22
|
+
* other cached image, including ones sharing layers with it (confirmed
|
|
23
|
+
* empirically: removing one image and re-pulling it left a sibling's
|
|
24
|
+
* already-materialized shared base layer untouched and bootable).
|
|
25
|
+
*/
|
|
26
|
+
imageRemove(reference: string): string[];
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/backend-msb/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;cACZ,aAAa,GAAG,MAAM,EAAE;eAyBvB,MAAM,OAAO,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;qBAInC,MAAM,OAAO,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;eAI/C,MAAM,GAAG,MAAM,EAAE;qBAIX,MAAM,GAAG,MAAM,EAAE;eAIvB,MAAM,GAAG,MAAM,EAAE;aAInB,MAAM,GAAG,MAAM,EAAE;UAIpB,MAAM,EAAE;IAKd;;;;;;;OAOG;2BACoB,MAAM,GAAG,MAAM,EAAE;CAGzC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure msb CLI argv construction. Every spelling here was checked against the
|
|
3
|
+
* real `msb` binary, not guessed from `--help` text alone. ATTACHED mode (no
|
|
4
|
+
* `-d`) is the whole ballgame: `msb run -d` boots the microVM but never runs
|
|
5
|
+
* the image's own ENTRYPOINT/CMD, only attached mode does — see
|
|
6
|
+
* `MsbCliBackend.start` for the supervision this forces.
|
|
7
|
+
*/
|
|
8
|
+
export const MsbCommands = {
|
|
9
|
+
run(spec) {
|
|
10
|
+
const argv = ["run", "--name", spec.name];
|
|
11
|
+
if (spec.memoryLimitMb !== undefined) {
|
|
12
|
+
// `-m`/`--memory` immediately after `--name`: msb's parser accepts any
|
|
13
|
+
// flag order, but the position matches captured real invocations so
|
|
14
|
+
// the argv can be compared against them verbatim.
|
|
15
|
+
argv.push("-m", `${spec.memoryLimitMb}M`);
|
|
16
|
+
}
|
|
17
|
+
for (const port of spec.ports) {
|
|
18
|
+
argv.push("-p", `${port.hostPort}:${port.guestPort}`);
|
|
19
|
+
}
|
|
20
|
+
for (const [key, value] of spec.env) {
|
|
21
|
+
argv.push("-e", `${key}=${value}`);
|
|
22
|
+
}
|
|
23
|
+
for (const mount of spec.mounts) {
|
|
24
|
+
argv.push("--mount-file", `${mount.hostPath}:${mount.guestPath}`);
|
|
25
|
+
}
|
|
26
|
+
argv.push(spec.image);
|
|
27
|
+
if (spec.command !== undefined) {
|
|
28
|
+
// undefined => the image's own ENTRYPOINT/CMD runs unmodified.
|
|
29
|
+
argv.push("--", ...spec.command);
|
|
30
|
+
}
|
|
31
|
+
return argv;
|
|
32
|
+
},
|
|
33
|
+
exec(name, cmd) {
|
|
34
|
+
return ["exec", name, "--", ...cmd];
|
|
35
|
+
},
|
|
36
|
+
execStream(name, cmd) {
|
|
37
|
+
return ["exec", "--stream", name, "--", ...cmd];
|
|
38
|
+
},
|
|
39
|
+
logs(name) {
|
|
40
|
+
return ["logs", name, "--tail", "1000"];
|
|
41
|
+
},
|
|
42
|
+
followLogs(name) {
|
|
43
|
+
return ["logs", name, "-f"];
|
|
44
|
+
},
|
|
45
|
+
stop(name) {
|
|
46
|
+
return ["stop", name];
|
|
47
|
+
},
|
|
48
|
+
rm(name) {
|
|
49
|
+
return ["rm", name];
|
|
50
|
+
},
|
|
51
|
+
ls() {
|
|
52
|
+
// No `--json` flag exists on `ls` — that spelling belongs to `logs`.
|
|
53
|
+
return ["ls", "--format", "json"];
|
|
54
|
+
},
|
|
55
|
+
/**
|
|
56
|
+
* `msb image remove <reference>` deletes one cached image's entry (manifest
|
|
57
|
+
* + layer bookkeeping) so the next run/pull re-fetches it from scratch.
|
|
58
|
+
* Scoped to the single image reference; never touches sandbox state or any
|
|
59
|
+
* other cached image, including ones sharing layers with it (confirmed
|
|
60
|
+
* empirically: removing one image and re-pulling it left a sibling's
|
|
61
|
+
* already-materialized shared base layer untouched and bootable).
|
|
62
|
+
*/
|
|
63
|
+
imageRemove(reference) {
|
|
64
|
+
return ["image", "remove", reference];
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/backend-msb/commands.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,CAAC,IAAmB;QACrB,MAAM,IAAI,GAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,uEAAuE;YACvE,oEAAoE;YACpE,kDAAkD;YAClD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,+DAA+D;YAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,GAAsB;QACvC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,GAAsB;QAC7C,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,EAAE,CAAC,IAAY;QACb,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,EAAE;QACA,qEAAqE;QACrE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,SAAiB;QAC3B,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { NetworkLink } from "../core/backend.js";
|
|
2
|
+
/**
|
|
3
|
+
* One `alias:guestPort` route into a consumer sandbox, bridged over `msb exec
|
|
4
|
+
* --stream`. Single connection at a time; the in-guest `nc -l` listener is
|
|
5
|
+
* respawned after each connection with backoff only when a respawn produced
|
|
6
|
+
* no traffic at all (a busy no-traffic loop must not spin `msb exec` at full
|
|
7
|
+
* speed; a connection that was actually served respawns immediately).
|
|
8
|
+
* Client-speaks-first protocols only (HTTP is) — the guest's listener must
|
|
9
|
+
* see a byte before this side opens the real target connection.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ExecTunnel {
|
|
12
|
+
private readonly msbPath;
|
|
13
|
+
private readonly sandboxName;
|
|
14
|
+
private readonly link;
|
|
15
|
+
private closed;
|
|
16
|
+
private current;
|
|
17
|
+
private readonly workerDone;
|
|
18
|
+
constructor(msbPath: string, sandboxName: string, link: NetworkLink);
|
|
19
|
+
private runWorker;
|
|
20
|
+
/** Returns true if a connection was actually relayed, so the worker only backs off on churn. */
|
|
21
|
+
private serveOneConnection;
|
|
22
|
+
/**
|
|
23
|
+
* Raw, unbuffered relay from `target` into the guest's stdin, ending the
|
|
24
|
+
* exchange on an idle-read timeout rather than waiting for a close msb's
|
|
25
|
+
* proxy will never deliver. `FIRST_BYTE_DEADLINE_MS` applies until the
|
|
26
|
+
* first byte of the response arrives; from then on the much shorter
|
|
27
|
+
* `IDLE_WINDOW_MS` applies, matching the two-phase contract described at
|
|
28
|
+
* the top of this file.
|
|
29
|
+
*/
|
|
30
|
+
private pumpWithIdleTimeout;
|
|
31
|
+
close(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=exec-tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-tunnel.d.ts","sourceRoot":"","sources":["../../src/backend-msb/exec-tunnel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiDtD;;;;;;;;GAQG;AACH,qBAAa,UAAU;IAMnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA4D;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAGxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW;YAKtB,SAAS;IASvB,gGAAgG;YAClF,kBAAkB;IAsChC;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAiCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import * as net from "node:net";
|
|
3
|
+
import { MsbCommands } from "./commands.js";
|
|
4
|
+
const RESPAWN_BACKOFF_MS = 200;
|
|
5
|
+
// msb's host-port-publish proxy never propagates the target's own TCP
|
|
6
|
+
// close back to this host-side socket — a plain end/close on the
|
|
7
|
+
// target-to-guest direction therefore never arrives, and a connection would
|
|
8
|
+
// otherwise hold the tunnel open forever after its first exchange. Two
|
|
9
|
+
// separate idle windows, not one: a generous FIRST_BYTE_DEADLINE tolerates a
|
|
10
|
+
// slow-but-real cold response before any target byte has arrived, then the
|
|
11
|
+
// much tighter IDLE_WINDOW takes over once data starts flowing, where a gap
|
|
12
|
+
// that short really does mean this single client-speaks-first exchange is
|
|
13
|
+
// done. Collapsing these into one window either truncates slow cold
|
|
14
|
+
// responses (window too short) or wedges the tunnel on every idle target
|
|
15
|
+
// (window too long).
|
|
16
|
+
const FIRST_BYTE_DEADLINE_MS = 10_000;
|
|
17
|
+
const IDLE_WINDOW_MS = 500;
|
|
18
|
+
function sleep(ms) {
|
|
19
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
20
|
+
}
|
|
21
|
+
/** Reads exactly one byte from a stream, or returns undefined if the stream ended with none. */
|
|
22
|
+
function firstByte(stream) {
|
|
23
|
+
return new Promise((resolveByte) => {
|
|
24
|
+
let settled = false;
|
|
25
|
+
const finish = (value) => {
|
|
26
|
+
if (settled) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
settled = true;
|
|
30
|
+
stream.removeListener("readable", onReadable);
|
|
31
|
+
stream.removeListener("end", onEnd);
|
|
32
|
+
resolveByte(value);
|
|
33
|
+
};
|
|
34
|
+
const onReadable = () => {
|
|
35
|
+
// No setEncoding() was ever called on this stream, so a non-null read
|
|
36
|
+
// is always a Buffer, never a decoded string.
|
|
37
|
+
const chunk = stream.read(1);
|
|
38
|
+
if (chunk !== null && chunk.length > 0 && typeof chunk !== "string") {
|
|
39
|
+
finish(chunk.readUInt8(0));
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const onEnd = () => finish(undefined);
|
|
43
|
+
stream.on("readable", onReadable);
|
|
44
|
+
stream.on("end", onEnd);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* One `alias:guestPort` route into a consumer sandbox, bridged over `msb exec
|
|
49
|
+
* --stream`. Single connection at a time; the in-guest `nc -l` listener is
|
|
50
|
+
* respawned after each connection with backoff only when a respawn produced
|
|
51
|
+
* no traffic at all (a busy no-traffic loop must not spin `msb exec` at full
|
|
52
|
+
* speed; a connection that was actually served respawns immediately).
|
|
53
|
+
* Client-speaks-first protocols only (HTTP is) — the guest's listener must
|
|
54
|
+
* see a byte before this side opens the real target connection.
|
|
55
|
+
*/
|
|
56
|
+
export class ExecTunnel {
|
|
57
|
+
msbPath;
|
|
58
|
+
sandboxName;
|
|
59
|
+
link;
|
|
60
|
+
closed = false;
|
|
61
|
+
current;
|
|
62
|
+
workerDone;
|
|
63
|
+
constructor(msbPath, sandboxName, link) {
|
|
64
|
+
this.msbPath = msbPath;
|
|
65
|
+
this.sandboxName = sandboxName;
|
|
66
|
+
this.link = link;
|
|
67
|
+
this.workerDone = this.runWorker();
|
|
68
|
+
}
|
|
69
|
+
async runWorker() {
|
|
70
|
+
while (!this.closed) {
|
|
71
|
+
const served = await this.serveOneConnection().catch(() => false);
|
|
72
|
+
if (!this.closed && !served) {
|
|
73
|
+
await sleep(RESPAWN_BACKOFF_MS);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Returns true if a connection was actually relayed, so the worker only backs off on churn. */
|
|
78
|
+
async serveOneConnection() {
|
|
79
|
+
const args = MsbCommands.execStream(this.sandboxName, ["nc", "-l", "-p", String(this.link.guestPort)]);
|
|
80
|
+
const child = spawn(this.msbPath, args, { stdio: ["pipe", "pipe", "ignore"] });
|
|
81
|
+
this.current = child;
|
|
82
|
+
try {
|
|
83
|
+
const first = await firstByte(child.stdout);
|
|
84
|
+
if (first === undefined) {
|
|
85
|
+
// Listener exited without a client ever connecting: back off and respawn.
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const target = net.connect(this.link.targetHostPort, "127.0.0.1");
|
|
89
|
+
target.setNoDelay(true);
|
|
90
|
+
await new Promise((resolveConnect, rejectConnect) => {
|
|
91
|
+
target.once("connect", () => resolveConnect());
|
|
92
|
+
target.once("error", rejectConnect);
|
|
93
|
+
});
|
|
94
|
+
const guestToTarget = (async () => {
|
|
95
|
+
target.write(Buffer.from([first]));
|
|
96
|
+
await new Promise((resolvePump) => {
|
|
97
|
+
child.stdout.pipe(target, { end: false });
|
|
98
|
+
child.stdout.once("end", () => resolvePump());
|
|
99
|
+
child.stdout.once("error", () => resolvePump());
|
|
100
|
+
target.once("error", () => resolvePump());
|
|
101
|
+
});
|
|
102
|
+
})();
|
|
103
|
+
await this.pumpWithIdleTimeout(target, child.stdin);
|
|
104
|
+
await Promise.race([guestToTarget, sleep(2000)]);
|
|
105
|
+
target.destroy();
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
child.kill();
|
|
110
|
+
this.current = undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Raw, unbuffered relay from `target` into the guest's stdin, ending the
|
|
115
|
+
* exchange on an idle-read timeout rather than waiting for a close msb's
|
|
116
|
+
* proxy will never deliver. `FIRST_BYTE_DEADLINE_MS` applies until the
|
|
117
|
+
* first byte of the response arrives; from then on the much shorter
|
|
118
|
+
* `IDLE_WINDOW_MS` applies, matching the two-phase contract described at
|
|
119
|
+
* the top of this file.
|
|
120
|
+
*/
|
|
121
|
+
pumpWithIdleTimeout(target, guestStdin) {
|
|
122
|
+
return new Promise((resolvePump) => {
|
|
123
|
+
let sawData = false;
|
|
124
|
+
let settled = false;
|
|
125
|
+
const finish = () => {
|
|
126
|
+
if (settled) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
settled = true;
|
|
130
|
+
target.removeAllListeners("data");
|
|
131
|
+
target.removeAllListeners("timeout");
|
|
132
|
+
target.removeAllListeners("end");
|
|
133
|
+
target.removeAllListeners("error");
|
|
134
|
+
resolvePump();
|
|
135
|
+
};
|
|
136
|
+
target.setTimeout(FIRST_BYTE_DEADLINE_MS);
|
|
137
|
+
target.on("data", (chunk) => {
|
|
138
|
+
if (!sawData) {
|
|
139
|
+
sawData = true;
|
|
140
|
+
target.setTimeout(IDLE_WINDOW_MS);
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
guestStdin.write(chunk);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
finish();
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
target.on("timeout", () => finish());
|
|
150
|
+
target.on("end", () => finish());
|
|
151
|
+
target.on("error", () => finish());
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async close() {
|
|
155
|
+
if (this.closed) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.closed = true;
|
|
159
|
+
this.current?.kill();
|
|
160
|
+
await Promise.race([this.workerDone, sleep(2000)]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=exec-tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-tunnel.js","sourceRoot":"","sources":["../../src/backend-msb/exec-tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,sEAAsE;AACtE,iEAAiE;AACjE,4EAA4E;AAC5E,uEAAuE;AACvE,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,oEAAoE;AACpE,yEAAyE;AACzE,qBAAqB;AACrB,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,gGAAgG;AAChG,SAAS,SAAS,CAAC,MAA6B;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACjC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAQ,EAAE;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC9C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,GAAS,EAAE;YAC5B,sEAAsE;YACtE,8CAA8C;YAC9C,MAAM,KAAK,GAAI,MAAkF,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1G,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IAMF;IACA;IACA;IAPX,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,CAA4D;IAC1D,UAAU,CAAgB;IAE3C,YACmB,OAAe,EACf,WAAmB,EACnB,IAAiB;QAFjB,YAAO,GAAP,OAAO,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAQ;QACnB,SAAI,GAAJ,IAAI,CAAa;QAElC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,gGAAgG;IACxF,KAAK,CAAC,kBAAkB;QAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,0EAA0E;gBAC1E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;gBACxD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,CAAC,KAAK,IAAmB,EAAE;gBAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;oBACtC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC1C,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC9C,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAC;YAEL,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,mBAAmB,CAAC,MAAkB,EAAE,UAAiC;QAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YACjC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,GAAS,EAAE;gBACxB,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAClC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACrC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACnC,WAAW,EAAE,CAAC;YAChB,CAAC,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC;oBACH,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure replay math behind the `followLogs` watchdog (see `backend.ts`):
|
|
3
|
+
* given the full authoritative tail fetched once the sandbox has left
|
|
4
|
+
* Running, and a count of how many lines the live `msb logs -f` stream had
|
|
5
|
+
* already delivered, returns only the lines still owed to the consumer.
|
|
6
|
+
*
|
|
7
|
+
* Trailing-newline handling mirrors `msb logs`'s own output shape: a
|
|
8
|
+
* complete log always ends with '\n', which must not manufacture a phantom
|
|
9
|
+
* empty final line — split on '\n' and drop one trailing empty element if
|
|
10
|
+
* the text ended with a newline, but never touch an interior empty line
|
|
11
|
+
* (a blank line the workload genuinely printed is real output).
|
|
12
|
+
*/
|
|
13
|
+
export declare function undeliveredLines(fullTailText: string, delivered: number): string[];
|
|
14
|
+
//# sourceMappingURL=follow-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow-replay.d.ts","sourceRoot":"","sources":["../../src/backend-msb/follow-replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAMlF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure replay math behind the `followLogs` watchdog (see `backend.ts`):
|
|
3
|
+
* given the full authoritative tail fetched once the sandbox has left
|
|
4
|
+
* Running, and a count of how many lines the live `msb logs -f` stream had
|
|
5
|
+
* already delivered, returns only the lines still owed to the consumer.
|
|
6
|
+
*
|
|
7
|
+
* Trailing-newline handling mirrors `msb logs`'s own output shape: a
|
|
8
|
+
* complete log always ends with '\n', which must not manufacture a phantom
|
|
9
|
+
* empty final line — split on '\n' and drop one trailing empty element if
|
|
10
|
+
* the text ended with a newline, but never touch an interior empty line
|
|
11
|
+
* (a blank line the workload genuinely printed is real output).
|
|
12
|
+
*/
|
|
13
|
+
export function undeliveredLines(fullTailText, delivered) {
|
|
14
|
+
const lines = fullTailText.split("\n");
|
|
15
|
+
if (fullTailText.endsWith("\n")) {
|
|
16
|
+
lines.pop();
|
|
17
|
+
}
|
|
18
|
+
return lines.slice(delivered);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=follow-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow-replay.js","sourceRoot":"","sources":["../../src/backend-msb/follow-replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,SAAiB;IACtE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,GAAG,EAAE,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True if `output` (an early-exited `msb run` child's combined stdout/stderr)
|
|
3
|
+
* names msb's image cache error: a manifest/layer index entry pointing at a
|
|
4
|
+
* cache file that isn't on disk. Observed verbatim against a real msb 0.6.3
|
|
5
|
+
* binary:
|
|
6
|
+
*
|
|
7
|
+
* ```
|
|
8
|
+
* error: image error: cache error at /path/to/.microsandbox/cache/layers/sha256_<64hex>.tar.gz: No such file or directory (os error 2)
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Root cause, reproduced by racing concurrent `msb run`/`msb pull` of images
|
|
12
|
+
* that share a base layer against one fresh cache: two pulls converting the
|
|
13
|
+
* same shared blob race, and the loser's read of the shared `.tar.gz` finds
|
|
14
|
+
* it already deleted by the winner's post-conversion cleanup. Confirmed
|
|
15
|
+
* order-independent: across ten trials of three concurrent pulls, seven
|
|
16
|
+
* reproduced the error, naming each image as the victim at least once. Never
|
|
17
|
+
* reproduces sequentially.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately a substring match on the stable parts of msb's wording
|
|
20
|
+
* ("cache error at", "No such file") rather than the full sentence — the path
|
|
21
|
+
* and digest vary per host/image, and msb has no structured/typed error for
|
|
22
|
+
* this.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isImageCacheCorruption(output: string): boolean;
|
|
25
|
+
//# sourceMappingURL=image-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-cache.d.ts","sourceRoot":"","sources":["../../src/backend-msb/image-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True if `output` (an early-exited `msb run` child's combined stdout/stderr)
|
|
3
|
+
* names msb's image cache error: a manifest/layer index entry pointing at a
|
|
4
|
+
* cache file that isn't on disk. Observed verbatim against a real msb 0.6.3
|
|
5
|
+
* binary:
|
|
6
|
+
*
|
|
7
|
+
* ```
|
|
8
|
+
* error: image error: cache error at /path/to/.microsandbox/cache/layers/sha256_<64hex>.tar.gz: No such file or directory (os error 2)
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Root cause, reproduced by racing concurrent `msb run`/`msb pull` of images
|
|
12
|
+
* that share a base layer against one fresh cache: two pulls converting the
|
|
13
|
+
* same shared blob race, and the loser's read of the shared `.tar.gz` finds
|
|
14
|
+
* it already deleted by the winner's post-conversion cleanup. Confirmed
|
|
15
|
+
* order-independent: across ten trials of three concurrent pulls, seven
|
|
16
|
+
* reproduced the error, naming each image as the victim at least once. Never
|
|
17
|
+
* reproduces sequentially.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately a substring match on the stable parts of msb's wording
|
|
20
|
+
* ("cache error at", "No such file") rather than the full sentence — the path
|
|
21
|
+
* and digest vary per host/image, and msb has no structured/typed error for
|
|
22
|
+
* this.
|
|
23
|
+
*/
|
|
24
|
+
export function isImageCacheCorruption(output) {
|
|
25
|
+
return output.includes("cache error at") && output.includes("No such file");
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=image-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-cache.js","sourceRoot":"","sources":["../../src/backend-msb/image-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { MsbCliBackend } from "./backend.js";
|
|
2
|
+
export { MsbBackendProvider } from "./provider.js";
|
|
3
|
+
export { PlatformInfo } from "./platform.js";
|
|
4
|
+
export type { Platform } from "./platform.js";
|
|
5
|
+
export { ensureInstalled, ensureInstalledAt, MSB_VERSION } from "./provisioner.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backend-msb/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rightsize/backend-msb` — the microsandbox (microVM) backend.
|
|
3
|
+
*
|
|
4
|
+
* Importing this module registers `MsbBackendProvider` with the core
|
|
5
|
+
* registry as a side effect (`priority: 20`, preferred over docker wherever
|
|
6
|
+
* both are supported). Runs every container as an attached `msb run` child
|
|
7
|
+
* process, provisions the pinned `msb` toolchain from GitHub releases on
|
|
8
|
+
* first use, and emulates container-to-container networking with
|
|
9
|
+
* `/etc/hosts` aliases plus TCP relays over `msb exec --stream` — there is
|
|
10
|
+
* no other guest data path on this platform.
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
import { registerBackend } from "../core/backends.js";
|
|
15
|
+
import { MsbBackendProvider } from "./provider.js";
|
|
16
|
+
registerBackend(new MsbBackendProvider());
|
|
17
|
+
export { MsbCliBackend } from "./backend.js";
|
|
18
|
+
export { MsbBackendProvider } from "./provider.js";
|
|
19
|
+
export { PlatformInfo } from "./platform.js";
|
|
20
|
+
export { ensureInstalled, ensureInstalledAt, MSB_VERSION } from "./provisioner.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backend-msb/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAe,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ExecResult } from "../core/model.js";
|
|
2
|
+
/**
|
|
3
|
+
* Every msb child this backend spawns gets a closed/null stdin. `msb exec`
|
|
4
|
+
* (and, empirically, plain `msb run`/`logs`/`ls` too) forwards a held-open
|
|
5
|
+
* stdin pipe straight through and blocks on it hitting EOF — a Node
|
|
6
|
+
* `"pipe"` stdin option never closes on its own, so any child spawned that
|
|
7
|
+
* way hangs forever the instant msb tries to read from it. `"ignore"`
|
|
8
|
+
* signals EOF immediately, which is exactly what every non-interactive
|
|
9
|
+
* invocation here wants.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CLOSED_STDIN: "ignore";
|
|
12
|
+
/**
|
|
13
|
+
* Runs one `msb <args>` invocation to completion: closed stdin (see
|
|
14
|
+
* `CLOSED_STDIN`), stdout/stderr drained line-by-line as they arrive, and —
|
|
15
|
+
* once the process has actually exited — the drain promises are awaited
|
|
16
|
+
* WITHOUT a time cap. A fixed join deadline here would truncate the tail of
|
|
17
|
+
* any command whose output hadn't finished flushing through the pipe by the
|
|
18
|
+
* time the process itself exited, which silently corrupts large `exec`
|
|
19
|
+
* output; the child is already dead by this point, so unbounded awaiting the
|
|
20
|
+
* remaining drain is safe by construction and Windows-length pipes are not a
|
|
21
|
+
* concern on the two platforms msb ships for.
|
|
22
|
+
*/
|
|
23
|
+
export declare function invoke(msbPath: string, args: readonly string[], timeoutMs: number): Promise<ExecResult>;
|
|
24
|
+
//# sourceMappingURL=invoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/backend-msb/invoke.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAG,QAAiB,CAAC;AAU9C;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA+CvG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import * as readline from "node:readline";
|
|
3
|
+
import { BackendError } from "../core/errors.js";
|
|
4
|
+
/**
|
|
5
|
+
* Every msb child this backend spawns gets a closed/null stdin. `msb exec`
|
|
6
|
+
* (and, empirically, plain `msb run`/`logs`/`ls` too) forwards a held-open
|
|
7
|
+
* stdin pipe straight through and blocks on it hitting EOF — a Node
|
|
8
|
+
* `"pipe"` stdin option never closes on its own, so any child spawned that
|
|
9
|
+
* way hangs forever the instant msb tries to read from it. `"ignore"`
|
|
10
|
+
* signals EOF immediately, which is exactly what every non-interactive
|
|
11
|
+
* invocation here wants.
|
|
12
|
+
*/
|
|
13
|
+
export const CLOSED_STDIN = "ignore";
|
|
14
|
+
function drainLines(stream, onLine) {
|
|
15
|
+
return new Promise((resolveDrain) => {
|
|
16
|
+
const rl = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
17
|
+
rl.on("line", onLine);
|
|
18
|
+
rl.on("close", () => resolveDrain());
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Runs one `msb <args>` invocation to completion: closed stdin (see
|
|
23
|
+
* `CLOSED_STDIN`), stdout/stderr drained line-by-line as they arrive, and —
|
|
24
|
+
* once the process has actually exited — the drain promises are awaited
|
|
25
|
+
* WITHOUT a time cap. A fixed join deadline here would truncate the tail of
|
|
26
|
+
* any command whose output hadn't finished flushing through the pipe by the
|
|
27
|
+
* time the process itself exited, which silently corrupts large `exec`
|
|
28
|
+
* output; the child is already dead by this point, so unbounded awaiting the
|
|
29
|
+
* remaining drain is safe by construction and Windows-length pipes are not a
|
|
30
|
+
* concern on the two platforms msb ships for.
|
|
31
|
+
*/
|
|
32
|
+
export function invoke(msbPath, args, timeoutMs) {
|
|
33
|
+
return new Promise((resolveInvoke, rejectInvoke) => {
|
|
34
|
+
const child = spawn(msbPath, args, { stdio: [CLOSED_STDIN, "pipe", "pipe"] });
|
|
35
|
+
const stdoutLines = [];
|
|
36
|
+
const stderrLines = [];
|
|
37
|
+
const stdoutDone = drainLines(child.stdout, (l) => stdoutLines.push(l));
|
|
38
|
+
const stderrDone = drainLines(child.stderr, (l) => stderrLines.push(l));
|
|
39
|
+
let settled = false;
|
|
40
|
+
const timer = setTimeout(() => {
|
|
41
|
+
if (settled) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
settled = true;
|
|
45
|
+
child.kill("SIGKILL");
|
|
46
|
+
rejectInvoke(new BackendError(`msb ${args.join(" ")} timed out after ${timeoutMs}ms and was force-killed — the msb ` +
|
|
47
|
+
`daemon may be overloaded or unresponsive; retry, or check 'msb' directly`));
|
|
48
|
+
}, timeoutMs);
|
|
49
|
+
child.once("error", (err) => {
|
|
50
|
+
if (settled) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
settled = true;
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
rejectInvoke(new BackendError(`failed to spawn 'msb ${args.join(" ")}': ${err.message}`));
|
|
56
|
+
});
|
|
57
|
+
child.once("exit", (code) => {
|
|
58
|
+
if (settled) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
settled = true;
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
Promise.all([stdoutDone, stderrDone]).then(() => {
|
|
64
|
+
resolveInvoke({
|
|
65
|
+
exitCode: code ?? -1,
|
|
66
|
+
stdout: stdoutLines.join("\n") + (stdoutLines.length > 0 ? "\n" : ""),
|
|
67
|
+
stderr: stderrLines.join("\n") + (stderrLines.length > 0 ? "\n" : ""),
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=invoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/backend-msb/invoke.ts"],"names":[],"mappings":"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"}
|