@alwaysai/device-agent 1.3.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/application-control/config.js +2 -2
- package/lib/application-control/config.js.map +1 -1
- package/lib/application-control/environment-variables.d.ts.map +1 -1
- package/lib/application-control/environment-variables.js +9 -4
- package/lib/application-control/environment-variables.js.map +1 -1
- package/lib/application-control/environment-variables.test.js +1 -1
- package/lib/application-control/environment-variables.test.js.map +1 -1
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +7 -2
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/models.d.ts +5 -0
- package/lib/application-control/models.d.ts.map +1 -1
- package/lib/application-control/models.js +28 -14
- package/lib/application-control/models.js.map +1 -1
- package/lib/application-control/status.d.ts.map +1 -1
- package/lib/application-control/status.js +14 -17
- package/lib/application-control/status.js.map +1 -1
- package/lib/application-control/utils.js +2 -2
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +5 -5
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +140 -105
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.d.ts +4 -2
- package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
- package/lib/cloud-connection/live-updates-handler.js +46 -25
- package/lib/cloud-connection/live-updates-handler.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.test.js +132 -16
- package/lib/cloud-connection/live-updates-handler.test.js.map +1 -1
- package/lib/cloud-connection/messages.d.ts.map +1 -1
- package/lib/cloud-connection/messages.js +3 -4
- package/lib/cloud-connection/messages.js.map +1 -1
- package/lib/cloud-connection/passthrough-handler.d.ts +5 -3
- package/lib/cloud-connection/passthrough-handler.d.ts.map +1 -1
- package/lib/cloud-connection/passthrough-handler.js +76 -62
- package/lib/cloud-connection/passthrough-handler.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.d.ts +16 -21
- package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
- package/lib/cloud-connection/shadow-handler.js +162 -108
- package/lib/cloud-connection/shadow-handler.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.test.js +100 -83
- package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
- package/lib/cloud-connection/transaction-manager.d.ts +3 -0
- package/lib/cloud-connection/transaction-manager.d.ts.map +1 -1
- package/lib/cloud-connection/transaction-manager.js +11 -0
- package/lib/cloud-connection/transaction-manager.js.map +1 -1
- package/lib/cloud-connection/transaction-manager.test.js +102 -0
- package/lib/cloud-connection/transaction-manager.test.js.map +1 -1
- package/lib/device-control/device-control.d.ts +16 -15
- package/lib/device-control/device-control.d.ts.map +1 -1
- package/lib/device-control/device-control.js +117 -18
- package/lib/device-control/device-control.js.map +1 -1
- package/lib/docker/docker-compose.d.ts +14 -0
- package/lib/docker/docker-compose.d.ts.map +1 -0
- package/lib/docker/docker-compose.js +56 -0
- package/lib/docker/docker-compose.js.map +1 -0
- package/lib/index.js +2 -5
- package/lib/index.js.map +1 -1
- package/lib/infrastructure/agent-config.d.ts +45 -14
- package/lib/infrastructure/agent-config.d.ts.map +1 -1
- package/lib/infrastructure/agent-config.js +30 -15
- package/lib/infrastructure/agent-config.js.map +1 -1
- package/lib/infrastructure/agent-config.test.js +3 -0
- package/lib/infrastructure/agent-config.test.js.map +1 -1
- package/lib/local-connection/rabbitmq-connection.js +11 -11
- package/lib/local-connection/rabbitmq-connection.js.map +1 -1
- package/lib/secure-tunneling/secure-tunneling.d.ts +97 -0
- package/lib/secure-tunneling/secure-tunneling.d.ts.map +1 -0
- package/lib/secure-tunneling/secure-tunneling.js +435 -0
- package/lib/secure-tunneling/secure-tunneling.js.map +1 -0
- package/lib/secure-tunneling/secure-tunneling.test.d.ts +2 -0
- package/lib/secure-tunneling/secure-tunneling.test.d.ts.map +1 -0
- package/lib/secure-tunneling/secure-tunneling.test.js +1070 -0
- package/lib/secure-tunneling/secure-tunneling.test.js.map +1 -0
- package/lib/secure-tunneling/spawner-detached.d.ts +6 -0
- package/lib/secure-tunneling/spawner-detached.d.ts.map +1 -0
- package/lib/secure-tunneling/spawner-detached.js +107 -0
- package/lib/secure-tunneling/spawner-detached.js.map +1 -0
- package/lib/subcommands/app/analytics.d.ts.map +1 -1
- package/lib/subcommands/app/analytics.js +9 -13
- package/lib/subcommands/app/analytics.js.map +1 -1
- package/lib/subcommands/app/env-vars.d.ts.map +1 -1
- package/lib/subcommands/app/env-vars.js +11 -16
- package/lib/subcommands/app/env-vars.js.map +1 -1
- package/lib/subcommands/app/models.d.ts.map +1 -1
- package/lib/subcommands/app/models.js +12 -16
- package/lib/subcommands/app/models.js.map +1 -1
- package/lib/subcommands/device/clean.d.ts.map +1 -1
- package/lib/subcommands/device/clean.js +8 -6
- package/lib/subcommands/device/clean.js.map +1 -1
- package/lib/subcommands/device/get-info.d.ts +2 -0
- package/lib/subcommands/device/get-info.d.ts.map +1 -0
- package/lib/subcommands/device/get-info.js +36 -0
- package/lib/subcommands/device/get-info.js.map +1 -0
- package/lib/subcommands/device/index.d.ts.map +1 -1
- package/lib/subcommands/device/index.js +11 -2
- package/lib/subcommands/device/index.js.map +1 -1
- package/lib/subcommands/device/init.d.ts +5 -0
- package/lib/subcommands/device/init.d.ts.map +1 -0
- package/lib/subcommands/device/{device.js → init.js} +5 -36
- package/lib/subcommands/device/init.js.map +1 -0
- package/lib/subcommands/device/refresh.d.ts +2 -0
- package/lib/subcommands/device/refresh.d.ts.map +1 -0
- package/lib/subcommands/device/refresh.js +24 -0
- package/lib/subcommands/device/refresh.js.map +1 -0
- package/lib/subcommands/device/restart.d.ts +2 -0
- package/lib/subcommands/device/restart.d.ts.map +1 -0
- package/lib/subcommands/device/restart.js +14 -0
- package/lib/subcommands/device/restart.js.map +1 -0
- package/lib/util/check-for-updates.d.ts +3 -0
- package/lib/util/check-for-updates.d.ts.map +1 -0
- package/lib/util/check-for-updates.js +69 -0
- package/lib/util/check-for-updates.js.map +1 -0
- package/lib/util/cloud-mode-ready.d.ts +1 -0
- package/lib/util/cloud-mode-ready.d.ts.map +1 -1
- package/lib/util/cloud-mode-ready.js +36 -1
- package/lib/util/cloud-mode-ready.js.map +1 -1
- package/lib/util/file.d.ts +7 -0
- package/lib/util/file.d.ts.map +1 -0
- package/lib/util/file.js +66 -0
- package/lib/util/file.js.map +1 -0
- package/lib/util/file.test.d.ts +2 -0
- package/lib/util/file.test.d.ts.map +1 -0
- package/lib/util/file.test.js +87 -0
- package/lib/util/file.test.js.map +1 -0
- package/package.json +8 -7
- package/readme.md +3 -3
- package/src/application-control/config.ts +1 -1
- package/src/application-control/environment-variables.test.ts +1 -1
- package/src/application-control/environment-variables.ts +9 -6
- package/src/application-control/install.ts +8 -3
- package/src/application-control/models.ts +47 -19
- package/src/application-control/status.ts +16 -14
- package/src/application-control/utils.ts +1 -1
- package/src/cloud-connection/device-agent-cloud-connection.ts +202 -148
- package/src/cloud-connection/live-updates-handler.test.ts +161 -20
- package/src/cloud-connection/live-updates-handler.ts +63 -31
- package/src/cloud-connection/messages.ts +3 -4
- package/src/cloud-connection/passthrough-handler.ts +98 -76
- package/src/cloud-connection/shadow-handler.test.ts +101 -84
- package/src/cloud-connection/shadow-handler.ts +287 -133
- package/src/cloud-connection/transaction-manager.test.ts +124 -0
- package/src/cloud-connection/transaction-manager.ts +15 -0
- package/src/device-control/device-control.ts +125 -23
- package/src/docker/docker-compose.ts +60 -0
- package/src/index.ts +2 -6
- package/src/infrastructure/agent-config.test.ts +3 -0
- package/src/infrastructure/agent-config.ts +38 -40
- package/src/local-connection/rabbitmq-connection.ts +8 -8
- package/src/secure-tunneling/secure-tunneling.test.ts +1239 -0
- package/src/secure-tunneling/secure-tunneling.ts +599 -0
- package/src/secure-tunneling/spawner-detached.ts +123 -0
- package/src/subcommands/app/analytics.ts +16 -13
- package/src/subcommands/app/env-vars.ts +18 -16
- package/src/subcommands/app/models.ts +20 -16
- package/src/subcommands/device/clean.ts +5 -2
- package/src/subcommands/device/get-info.ts +49 -0
- package/src/subcommands/device/index.ts +11 -2
- package/src/subcommands/device/{device.ts → init.ts} +5 -47
- package/src/subcommands/device/refresh.ts +22 -0
- package/src/subcommands/device/restart.ts +11 -0
- package/src/util/check-for-updates.ts +69 -0
- package/src/util/cloud-mode-ready.ts +36 -0
- package/src/util/file.test.ts +90 -0
- package/src/util/file.ts +76 -0
- package/lib/docker/docker-compose-cmd.d.ts +0 -5
- package/lib/docker/docker-compose-cmd.d.ts.map +0 -1
- package/lib/docker/docker-compose-cmd.js +0 -16
- package/lib/docker/docker-compose-cmd.js.map +0 -1
- package/lib/secure-tunneling/index.d.ts +0 -5
- package/lib/secure-tunneling/index.d.ts.map +0 -1
- package/lib/secure-tunneling/index.js +0 -64
- package/lib/secure-tunneling/index.js.map +0 -1
- package/lib/subcommands/device/device.d.ts +0 -7
- package/lib/subcommands/device/device.d.ts.map +0 -1
- package/lib/subcommands/device/device.js.map +0 -1
- package/lib/util/safe-rimraf.d.ts +0 -2
- package/lib/util/safe-rimraf.d.ts.map +0 -1
- package/lib/util/safe-rimraf.js +0 -16
- package/lib/util/safe-rimraf.js.map +0 -1
- package/src/docker/docker-compose-cmd.ts +0 -15
- package/src/secure-tunneling/index.ts +0 -74
- package/src/util/safe-rimraf.ts +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config.test.js","sourceRoot":"","sources":["../../src/infrastructure/agent-config.test.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,iDAAiD;AAEjD,MAAM,UAAU,GAAG,IAAA,8BAAe,EAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAEtD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;gBAC5C,SAAS,EAAE,YAAY;aACxB,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC;gBACxC,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC;YAE/B,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBACnB;oBACE,SAAS;oBACT,OAAO;oBACP,KAAK,EAAE,KAAK;iBACb;aACF,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;YAClD,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAClB,SAAS;gBACT,OAAO;gBACP,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC;YAE/B,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBACnB;oBACE,SAAS;oBACT,OAAO;oBACP,KAAK,EAAE,IAAI;iBACZ;aACF,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;YAClD,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;gBACxB;oBACE,SAAS;oBACT,OAAO;oBACP,KAAK,EAAE,IAAI;iBACZ;aACF,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAClB,SAAS;gBACT,OAAO;gBACP,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC;YAE/B,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,UAAU,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC;gBAC5C,SAAS,EAAE,YAAY;aACxB,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC;gBACxC,SAAS,EAAE,gBAAgB;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC;YAC/B,MAAM,QAAQ,GAAG,eAAe,CAAC;YAEjC,yCAAyC;YACzC,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBACnB;oBACE,SAAS;oBACT,OAAO;oBACP,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE;wBACN,OAAO;qBACR;iBACF;aACF,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBAClB,SAAS;gBACT,OAAO;gBACP,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE;oBACN,OAAO;iBACR;aACF,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAErC,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YACpC,MAAM,QAAQ,GAAG,eAAe,CAAC;YACjC,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAEhE,sDAAsD;YACtD,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9D,gCAAgC;YAChC,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,MAAM,qBAAqB,GAAG,MAAA,CAC5B,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAC7C,0CAAE,OAAO,CAAC;YACX,MAAM,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAExE,kCAAkC;YAClC,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,MAAM,wBAAwB,GAAG,MAAA,CAC/B,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAC7C,0CAAE,OAAO,CAAC;YACX,MAAM,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAExE,wEAAwE;YACxE,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEpE,6BAA6B;YAC7B,MAAM,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAExE,sCAAsC;YACtC,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,MAAM,kBAAkB,GAAG,MAAA,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,0CACrE,OAAO,CAAC;YACZ,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent-config.test.js","sourceRoot":"","sources":["../../src/infrastructure/agent-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.stopRabbitMQContainer = exports.setupRabbitMQContainer = exports.writeRabbitMQDockerComposeFile = exports.checkRabbitMQContainerRunning = exports.rabbitMQContainerName = exports.rabbitMQServiceName = void 0;
|
|
4
4
|
const logger_1 = require("../util/logger");
|
|
5
5
|
const sleep_1 = require("../util/sleep");
|
|
6
|
-
const docker_compose_1 = require("docker-compose");
|
|
6
|
+
const docker_compose_1 = require("../docker/docker-compose");
|
|
7
7
|
const YAML = require("yaml");
|
|
8
8
|
const directories_1 = require("../util/directories");
|
|
9
9
|
const util_1 = require("alwaysai/lib/util");
|
|
@@ -17,18 +17,18 @@ async function checkRabbitMQContainerRunning() {
|
|
|
17
17
|
logger_1.logger.warn('alwaysAI Location Connection configuration file is not present');
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
|
-
const containerData = await docker_compose_1.
|
|
21
|
-
if (
|
|
20
|
+
const containerData = await docker_compose_1.compose.ps({ cwd: directories_1.DEVICE_AGENT_CFG_PATH });
|
|
21
|
+
if (containerData !== undefined) {
|
|
22
22
|
const rabbitmqService = containerData.data.services[0];
|
|
23
|
-
if (rabbitmqService.name === exports.rabbitMQContainerName &&
|
|
24
|
-
rabbitmqService.state
|
|
25
|
-
logger_1.logger.debug('alwaysAI Local Connection is
|
|
23
|
+
if ((rabbitmqService === null || rabbitmqService === void 0 ? void 0 : rabbitmqService.name) === exports.rabbitMQContainerName &&
|
|
24
|
+
rabbitmqService.state.includes('Up')) {
|
|
25
|
+
logger_1.logger.debug('alwaysAI Local Connection Container is up');
|
|
26
26
|
return true;
|
|
27
27
|
}
|
|
28
|
-
logger_1.logger.debug('alwaysAI Local Connection is not
|
|
28
|
+
logger_1.logger.debug('alwaysAI Local Connection Container is not up');
|
|
29
29
|
return false;
|
|
30
30
|
}
|
|
31
|
-
logger_1.logger.warn('alwaysAI Local Connection
|
|
31
|
+
logger_1.logger.warn('alwaysAI Local Connection Container is undefined');
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
34
|
exports.checkRabbitMQContainerRunning = checkRabbitMQContainerRunning;
|
|
@@ -67,7 +67,7 @@ async function setupRabbitMQContainer() {
|
|
|
67
67
|
logger_1.logger.error(`An error occurred setting up docker-compose.yaml for Device Agent pass through:\n{e.message}`);
|
|
68
68
|
}
|
|
69
69
|
try {
|
|
70
|
-
const upOut = await docker_compose_1.
|
|
70
|
+
const upOut = await docker_compose_1.compose.upAll({
|
|
71
71
|
cwd: directories_1.DEVICE_AGENT_CFG_PATH
|
|
72
72
|
});
|
|
73
73
|
logger_1.logger.debug(`Docker compose up for alwaysAI Local Connection:\n${JSON.stringify(upOut)}`);
|
|
@@ -77,13 +77,13 @@ async function setupRabbitMQContainer() {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
catch (e) {
|
|
80
|
-
logger_1.logger.error(`Unable to start alwaysAI Device Agent Local Connection Container:\n${e
|
|
80
|
+
logger_1.logger.error(`Unable to start alwaysAI Device Agent Local Connection Container:\n${e}`);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
exports.setupRabbitMQContainer = setupRabbitMQContainer;
|
|
84
84
|
async function stopRabbitMQContainer() {
|
|
85
85
|
try {
|
|
86
|
-
const downOut = await docker_compose_1.
|
|
86
|
+
const downOut = await docker_compose_1.compose.down({ cwd: directories_1.DEVICE_AGENT_CFG_PATH });
|
|
87
87
|
logger_1.logger.debug(`Stopping alwaysAI Local Connection container`);
|
|
88
88
|
logger_1.logger.debug(`Docker compose down for alwaysAI Local Connection:\n${JSON.stringify(downOut)}`);
|
|
89
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-connection.js","sourceRoot":"","sources":["../../src/local-connection/rabbitmq-connection.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,yCAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"rabbitmq-connection.js","sourceRoot":"","sources":["../../src/local-connection/rabbitmq-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { SecureTunnelShadowDescriptionReported } from '@alwaysai/device-agent-schemas';
|
|
2
|
+
export declare type SecureTunnelShadowState = {
|
|
3
|
+
reported?: SecureTunnelShadowDescriptionReported;
|
|
4
|
+
desired?: SecureTunnelShadowDescriptionReported;
|
|
5
|
+
};
|
|
6
|
+
export declare type SecureTunnelShadowUpdateDelta = {
|
|
7
|
+
version: number;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
state: SecureTunnelShadowDescriptionReported;
|
|
10
|
+
metadata?: any;
|
|
11
|
+
};
|
|
12
|
+
export declare type SecureTunnelShadowUpdate = {
|
|
13
|
+
version: number;
|
|
14
|
+
state: SecureTunnelShadowState;
|
|
15
|
+
};
|
|
16
|
+
declare type SecureTunnelNotificationType = {
|
|
17
|
+
clientAccessToken: string;
|
|
18
|
+
region: string;
|
|
19
|
+
services: string[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Handles Secure Tunnel Shadow State
|
|
23
|
+
*/
|
|
24
|
+
export declare class SecureTunnelHandlerSingleton {
|
|
25
|
+
private static instance;
|
|
26
|
+
private reported;
|
|
27
|
+
private httpProxyMap;
|
|
28
|
+
private localProxyInfo;
|
|
29
|
+
/**
|
|
30
|
+
* Initializes private variables of SecureTunnel handler.
|
|
31
|
+
* private constructor to prevent instantiation from outside
|
|
32
|
+
*/
|
|
33
|
+
private constructor();
|
|
34
|
+
/**
|
|
35
|
+
* Implements the Singleton of the SecureTunnel
|
|
36
|
+
*/
|
|
37
|
+
static getInstance(): SecureTunnelHandlerSingleton;
|
|
38
|
+
/**
|
|
39
|
+
* Stops all proxies started before
|
|
40
|
+
*/
|
|
41
|
+
destroy(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Returns current state of SecureTunnel shadow
|
|
44
|
+
* @returns {SecureTunnelShadowDescriptionReported} - reported state of the SecureTunnel shadow
|
|
45
|
+
*/
|
|
46
|
+
getSecureTunnelShadow(): SecureTunnelShadowDescriptionReported;
|
|
47
|
+
/**
|
|
48
|
+
* Updates current state of SecureTunnel shadow
|
|
49
|
+
* @param {SecureTunnelShadowUpdateDelta} deltaMsg - delta message, which includes desired state of the SecureTunnel shadow
|
|
50
|
+
* @return {SecureTunnelShadowDescriptionReported} update reported message to send back to AWS IoT device shadow
|
|
51
|
+
*/
|
|
52
|
+
syncShadowToDeviceState(deltaMsg: SecureTunnelShadowUpdateDelta): Promise<SecureTunnelShadowDescriptionReported>;
|
|
53
|
+
/**
|
|
54
|
+
* Starts SecureTunnel
|
|
55
|
+
* @param {SecureTunnelNotificationType} message - AWS notification received
|
|
56
|
+
*/
|
|
57
|
+
secureTunnelNotifyHandler(message: SecureTunnelNotificationType): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Removes reported ports which are do not exist in desired
|
|
60
|
+
* @param {SecureTunnelPortInfo[]} desiredPorts - desired port config
|
|
61
|
+
*/
|
|
62
|
+
private CleanupReportedPorts;
|
|
63
|
+
/**
|
|
64
|
+
* Starts port proxy mapping process
|
|
65
|
+
* @param {SecureTunnelPortInfo} portInfo - port info to start the port mapping process for
|
|
66
|
+
*/
|
|
67
|
+
private startProxyMapping;
|
|
68
|
+
/**
|
|
69
|
+
* Stops port proxy mapping process
|
|
70
|
+
* @param {SecureTunnelPortInfo} portInfo - port info to stop the port mapping process for
|
|
71
|
+
*/
|
|
72
|
+
private stopProxyMapping;
|
|
73
|
+
/**
|
|
74
|
+
* Starts SecureTunnel localProxy process
|
|
75
|
+
*/
|
|
76
|
+
private startLocalProxy;
|
|
77
|
+
/**
|
|
78
|
+
* Stops SecureTunnel local proxy process
|
|
79
|
+
*/
|
|
80
|
+
private stopLocalProxy;
|
|
81
|
+
/**
|
|
82
|
+
* processes and validate notify message
|
|
83
|
+
* @param {string[]} message - message, which contains: clientAccessToken, region, services
|
|
84
|
+
*/
|
|
85
|
+
private processNotifyMessage;
|
|
86
|
+
/**
|
|
87
|
+
* Downloads SecureTunnel local proxy, if it was not downloaded before
|
|
88
|
+
*/
|
|
89
|
+
private downloadSecureTunnel;
|
|
90
|
+
/**
|
|
91
|
+
* Gets next available localhost port
|
|
92
|
+
*/
|
|
93
|
+
private getNextAvailablePort;
|
|
94
|
+
private sortPorts;
|
|
95
|
+
}
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=secure-tunneling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-tunneling.d.ts","sourceRoot":"","sources":["../../src/secure-tunneling/secure-tunneling.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,qCAAqC,EACtC,MAAM,gCAAgC,CAAC;AAOxC,oBAAY,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,qCAAqC,CAAC;IACjD,OAAO,CAAC,EAAE,qCAAqC,CAAC;CACjD,CAAC;AAEF,oBAAY,6BAA6B,GAAG;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,qCAAqC,CAAC;IAC7C,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,oBAAY,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAsBF,aAAK,4BAA4B,GAAG;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAMF;;GAEG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,cAAc,CAA6B;IAEnD;;;OAGG;IACH,OAAO;IAqBP;;OAEG;WACW,WAAW,IAAI,4BAA4B;IAUzD;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBrC;;;OAGG;IACI,qBAAqB,IAAI,qCAAqC;IAOrE;;;;OAIG;IACU,uBAAuB,CAClC,QAAQ,EAAE,6BAA6B,GACtC,OAAO,CAAC,qCAAqC,CAAC;IA0DjD;;;OAGG;IACU,yBAAyB,CACpC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;OAGG;YACW,oBAAoB;IAkClC;;;OAGG;YACW,iBAAiB;IA+C/B;;;OAGG;YACW,gBAAgB;IA2C9B;;OAEG;YACW,eAAe;IAuB7B;;OAEG;YACW,cAAc;IA4B5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmF5B;;OAEG;YACW,oBAAoB;IA8BlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,SAAS;CAmBlB"}
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecureTunnelHandlerSingleton = void 0;
|
|
4
|
+
const paths_1 = require("alwaysai/lib/paths");
|
|
5
|
+
const util_1 = require("alwaysai/lib/util");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const urls_1 = require("../urls");
|
|
8
|
+
const cloud_mode_ready_1 = require("../util/cloud-mode-ready");
|
|
9
|
+
const directories_1 = require("../util/directories");
|
|
10
|
+
const download_file_1 = require("../util/download-file");
|
|
11
|
+
const logger_1 = require("../util/logger");
|
|
12
|
+
const system_info_1 = require("../util/system-info");
|
|
13
|
+
const spawner_detached_1 = require("./spawner-detached");
|
|
14
|
+
var SecureTunnelServiceType;
|
|
15
|
+
(function (SecureTunnelServiceType) {
|
|
16
|
+
SecureTunnelServiceType["SSH"] = "SSH";
|
|
17
|
+
SecureTunnelServiceType["HTTP"] = "HTTP";
|
|
18
|
+
})(SecureTunnelServiceType || (SecureTunnelServiceType = {}));
|
|
19
|
+
const defaultSecureTunnelPortInfo = {
|
|
20
|
+
enabled: false,
|
|
21
|
+
type: SecureTunnelServiceType.SSH,
|
|
22
|
+
ip: '0.0.0.0',
|
|
23
|
+
port: 22
|
|
24
|
+
};
|
|
25
|
+
// socat tcp4-listen:5001,fork tcp4:100.70.31.118:80
|
|
26
|
+
const ST_MAPPING_TOOL = 'socat';
|
|
27
|
+
const ST_START_PORT_NUMBER = 5010;
|
|
28
|
+
/**
|
|
29
|
+
* Handles Secure Tunnel Shadow State
|
|
30
|
+
*/
|
|
31
|
+
class SecureTunnelHandlerSingleton {
|
|
32
|
+
/**
|
|
33
|
+
* Initializes private variables of SecureTunnel handler.
|
|
34
|
+
* private constructor to prevent instantiation from outside
|
|
35
|
+
*/
|
|
36
|
+
constructor() {
|
|
37
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.constructor');
|
|
38
|
+
this.reported = {
|
|
39
|
+
st_ports: [JSON.parse(JSON.stringify(defaultSecureTunnelPortInfo))]
|
|
40
|
+
};
|
|
41
|
+
this.httpProxyMap = [];
|
|
42
|
+
this.localProxyInfo = {
|
|
43
|
+
lpDstAccessKey: '',
|
|
44
|
+
lpRegion: '',
|
|
45
|
+
lpServices: '',
|
|
46
|
+
lpProcess: null
|
|
47
|
+
};
|
|
48
|
+
// TODO: create a recovery process if we just restarted
|
|
49
|
+
// for that to work we need to store somewhere the dst access key,
|
|
50
|
+
// recover it to restart local proxy to reconnect to secure tunnel
|
|
51
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.constructor');
|
|
52
|
+
}
|
|
53
|
+
//---------------------------------------------------------------------------
|
|
54
|
+
// public functions
|
|
55
|
+
//---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Implements the Singleton of the SecureTunnel
|
|
58
|
+
*/
|
|
59
|
+
static getInstance() {
|
|
60
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.getInstance');
|
|
61
|
+
if (!SecureTunnelHandlerSingleton.instance) {
|
|
62
|
+
SecureTunnelHandlerSingleton.instance =
|
|
63
|
+
new SecureTunnelHandlerSingleton();
|
|
64
|
+
}
|
|
65
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.getInstance');
|
|
66
|
+
return SecureTunnelHandlerSingleton.instance;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Stops all proxies started before
|
|
70
|
+
*/
|
|
71
|
+
async destroy() {
|
|
72
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.destroy');
|
|
73
|
+
logger_1.logger.debug(`httpProxyMap before : ${JSON.stringify(this.httpProxyMap)}`);
|
|
74
|
+
logger_1.logger.debug(`reported before : ${JSON.stringify(this.reported)}`);
|
|
75
|
+
// We need operate on a copy instead of the original this.httpProxyMap
|
|
76
|
+
// because stopProxyMapping removes entries and there for manipulates this loop
|
|
77
|
+
const httpProxyMapCopy = JSON.parse(JSON.stringify(this.httpProxyMap));
|
|
78
|
+
for (const item of httpProxyMapCopy) {
|
|
79
|
+
await this.stopProxyMapping(item.st_port);
|
|
80
|
+
}
|
|
81
|
+
this.reported = {
|
|
82
|
+
st_ports: [JSON.parse(JSON.stringify(defaultSecureTunnelPortInfo))]
|
|
83
|
+
};
|
|
84
|
+
logger_1.logger.debug(`httpProxyMap after : ${JSON.stringify(this.httpProxyMap)}`);
|
|
85
|
+
logger_1.logger.debug(`reported after : ${JSON.stringify(this.reported)}`);
|
|
86
|
+
await this.stopLocalProxy();
|
|
87
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.destroy');
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Returns current state of SecureTunnel shadow
|
|
91
|
+
* @returns {SecureTunnelShadowDescriptionReported} - reported state of the SecureTunnel shadow
|
|
92
|
+
*/
|
|
93
|
+
getSecureTunnelShadow() {
|
|
94
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.getSecureTunnelShadow');
|
|
95
|
+
logger_1.logger.debug(`reported: ${JSON.stringify(this.reported)}`);
|
|
96
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.getSecureTunnelShadow');
|
|
97
|
+
return this.reported;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Updates current state of SecureTunnel shadow
|
|
101
|
+
* @param {SecureTunnelShadowUpdateDelta} deltaMsg - delta message, which includes desired state of the SecureTunnel shadow
|
|
102
|
+
* @return {SecureTunnelShadowDescriptionReported} update reported message to send back to AWS IoT device shadow
|
|
103
|
+
*/
|
|
104
|
+
async syncShadowToDeviceState(deltaMsg) {
|
|
105
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.syncShadowToDeviceState');
|
|
106
|
+
const { version, state } = deltaMsg;
|
|
107
|
+
if (!state || typeof state.st_ports === 'undefined') {
|
|
108
|
+
return this.reported;
|
|
109
|
+
}
|
|
110
|
+
logger_1.logger.debug(`version: ${version}`);
|
|
111
|
+
logger_1.logger.debug(`state.st_ports: ${JSON.stringify(state.st_ports)}`);
|
|
112
|
+
await this.CleanupReportedPorts(state.st_ports);
|
|
113
|
+
for (const item of state.st_ports) {
|
|
114
|
+
logger_1.logger.debug(`desiredItem: ${JSON.stringify(item)}`);
|
|
115
|
+
const existingPort = this.reported.st_ports.find((portInfo) => portInfo.ip === item.ip &&
|
|
116
|
+
portInfo.port === item.port &&
|
|
117
|
+
portInfo.type === item.type);
|
|
118
|
+
logger_1.logger.debug(`existingPort: ${JSON.stringify(existingPort)}`);
|
|
119
|
+
const numberOfEnabledPorts = this.reported.st_ports.reduce((acc, port) => {
|
|
120
|
+
return port.enabled ? acc + 1 : acc;
|
|
121
|
+
}, 0);
|
|
122
|
+
// check that port already exist in the reported shadow
|
|
123
|
+
if (!existingPort) {
|
|
124
|
+
if (item.enabled && item.type === SecureTunnelServiceType.HTTP) {
|
|
125
|
+
await this.startProxyMapping(item);
|
|
126
|
+
}
|
|
127
|
+
this.reported.st_ports.push(item);
|
|
128
|
+
}
|
|
129
|
+
else if (existingPort.enabled !== item.enabled) {
|
|
130
|
+
if (item.type === SecureTunnelServiceType.HTTP) {
|
|
131
|
+
if (item.enabled) {
|
|
132
|
+
await this.startProxyMapping(item);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
await this.stopProxyMapping(item);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
existingPort.enabled = item.enabled;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// if all entries are disabled, we need also to kill local proxy
|
|
142
|
+
if (this.reported.st_ports.every((portInfo) => !portInfo.enabled)) {
|
|
143
|
+
await this.stopLocalProxy();
|
|
144
|
+
}
|
|
145
|
+
// need to order list in the same order as desired before sending back
|
|
146
|
+
const sortedPorts = this.sortPorts(state);
|
|
147
|
+
logger_1.logger.debug(`sortedPorts: ${JSON.stringify(sortedPorts)}`);
|
|
148
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.syncShadowToDeviceState');
|
|
149
|
+
return sortedPorts;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Starts SecureTunnel
|
|
153
|
+
* @param {SecureTunnelNotificationType} message - AWS notification received
|
|
154
|
+
*/
|
|
155
|
+
async secureTunnelNotifyHandler(message) {
|
|
156
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.secureTunnelNotifyHandler');
|
|
157
|
+
try {
|
|
158
|
+
await this.stopLocalProxy();
|
|
159
|
+
this.processNotifyMessage(message);
|
|
160
|
+
await this.downloadSecureTunnel();
|
|
161
|
+
await this.startLocalProxy();
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
logger_1.logger.error(error);
|
|
165
|
+
}
|
|
166
|
+
logger_1.logger.info(`Local Proxy Started: ${JSON.stringify(this.localProxyInfo)}`);
|
|
167
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.secureTunnelNotifyHandler');
|
|
168
|
+
}
|
|
169
|
+
//---------------------------------------------------------------------------
|
|
170
|
+
// private functions
|
|
171
|
+
//---------------------------------------------------------------------------
|
|
172
|
+
/**
|
|
173
|
+
* Removes reported ports which are do not exist in desired
|
|
174
|
+
* @param {SecureTunnelPortInfo[]} desiredPorts - desired port config
|
|
175
|
+
*/
|
|
176
|
+
async CleanupReportedPorts(desiredPorts) {
|
|
177
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.CleanupReportedPorts');
|
|
178
|
+
const itemsToRemove = [];
|
|
179
|
+
for (const item of this.reported.st_ports) {
|
|
180
|
+
logger_1.logger.debug(`Checking item: ${JSON.stringify(item)}`);
|
|
181
|
+
if (!desiredPorts.some((port) => port.ip === item.ip &&
|
|
182
|
+
port.port === item.port &&
|
|
183
|
+
port.type === item.type)) {
|
|
184
|
+
logger_1.logger.debug(`Marking item for removal: ${JSON.stringify(item)}`);
|
|
185
|
+
itemsToRemove.push(item);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
for (const item of itemsToRemove) {
|
|
189
|
+
const index = this.reported.st_ports.indexOf(item);
|
|
190
|
+
if (index !== -1) {
|
|
191
|
+
const removedItem = this.reported.st_ports.splice(index, 1)[0];
|
|
192
|
+
logger_1.logger.debug(`Removing item: ${JSON.stringify(removedItem)}`);
|
|
193
|
+
if (removedItem.type === SecureTunnelServiceType.HTTP) {
|
|
194
|
+
await this.stopProxyMapping(removedItem);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
logger_1.logger.debug(`reportedPorts: ${JSON.stringify(this.reported.st_ports)}`);
|
|
199
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.CleanupReportedPorts');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Starts port proxy mapping process
|
|
203
|
+
* @param {SecureTunnelPortInfo} portInfo - port info to start the port mapping process for
|
|
204
|
+
*/
|
|
205
|
+
async startProxyMapping(portInfo) {
|
|
206
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.startProxyMapping');
|
|
207
|
+
logger_1.logger.debug(`portInfo: ${JSON.stringify(portInfo)}`);
|
|
208
|
+
// if there is already a process running for the ip:port, don't start another one
|
|
209
|
+
const itemIndex = this.httpProxyMap.findIndex((item) => item.st_port.ip === portInfo.ip && item.st_port.port === portInfo.port);
|
|
210
|
+
if (itemIndex !== -1) {
|
|
211
|
+
logger_1.logger.debug(`socat already active for: ${portInfo.ip}:${portInfo.port}`);
|
|
212
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.startProxyMapping');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const localPort = this.getNextAvailablePort();
|
|
216
|
+
try {
|
|
217
|
+
logger_1.logger.info(`Starting Port Proxy Mapping on ${localPort}`);
|
|
218
|
+
const args = [
|
|
219
|
+
`tcp4-listen:${localPort},fork`,
|
|
220
|
+
`tcp4:${portInfo.ip}:${portInfo.port}`
|
|
221
|
+
];
|
|
222
|
+
const childProcess = await (0, spawner_detached_1.runDetachedProcess)(ST_MAPPING_TOOL, args);
|
|
223
|
+
// TODO: if there is a device restart, to restore port mapping,
|
|
224
|
+
// this info needs to be saved on drive to be able to recover
|
|
225
|
+
this.httpProxyMap.push({
|
|
226
|
+
st_port: portInfo,
|
|
227
|
+
localhostPort: localPort,
|
|
228
|
+
mapProcess: childProcess
|
|
229
|
+
});
|
|
230
|
+
logger_1.logger.info(`Started Port Proxy Mapping for: ${JSON.stringify(this.httpProxyMap[this.httpProxyMap.length - 1])}`);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
logger_1.logger.error(`ERROR: starting socat for: ${portInfo.ip}:${portInfo.port} on localhost port: ${localPort}, error: ${error}`);
|
|
234
|
+
const lastHttpProxyMap = this.httpProxyMap.pop();
|
|
235
|
+
logger_1.logger.info(`removed last proxyMap: ${JSON.stringify(lastHttpProxyMap)}`);
|
|
236
|
+
}
|
|
237
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.startProxyMapping');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Stops port proxy mapping process
|
|
241
|
+
* @param {SecureTunnelPortInfo} portInfo - port info to stop the port mapping process for
|
|
242
|
+
*/
|
|
243
|
+
async stopProxyMapping(portInfo) {
|
|
244
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.stopProxyMapping');
|
|
245
|
+
logger_1.logger.debug(`portInfo: ${JSON.stringify(portInfo)}`);
|
|
246
|
+
const itemIndex = this.httpProxyMap.findIndex((item) => item.st_port.ip === portInfo.ip && item.st_port.port === portInfo.port);
|
|
247
|
+
if (itemIndex !== -1) {
|
|
248
|
+
logger_1.logger.info(`Stopping Port Proxy Mapping for: ${JSON.stringify(this.httpProxyMap[itemIndex])}`);
|
|
249
|
+
try {
|
|
250
|
+
const processName = [
|
|
251
|
+
ST_MAPPING_TOOL,
|
|
252
|
+
`tcp4-listen:${this.httpProxyMap[itemIndex].localhostPort},fork`,
|
|
253
|
+
`tcp4:${portInfo.ip}:${portInfo.port}`
|
|
254
|
+
];
|
|
255
|
+
await (0, spawner_detached_1.killDetachedProcess)(this.httpProxyMap[itemIndex].mapProcess, [
|
|
256
|
+
processName.join(' ')
|
|
257
|
+
]);
|
|
258
|
+
logger_1.logger.debug(`SUCCESS: killing socat process: ${JSON.stringify(this.httpProxyMap[itemIndex])}`);
|
|
259
|
+
logger_1.logger.debug(`Remaining map: ${JSON.stringify(this.httpProxyMap)}`);
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
logger_1.logger.error('ERROR: killing socat process:', e);
|
|
263
|
+
}
|
|
264
|
+
logger_1.logger.debug(`Removing map: ${JSON.stringify(this.httpProxyMap[itemIndex])}`);
|
|
265
|
+
this.httpProxyMap.splice(itemIndex, 1);
|
|
266
|
+
}
|
|
267
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.stopProxyMapping');
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Starts SecureTunnel localProxy process
|
|
271
|
+
*/
|
|
272
|
+
async startLocalProxy() {
|
|
273
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.startLocalProxy');
|
|
274
|
+
const args = [
|
|
275
|
+
'--destination-app',
|
|
276
|
+
this.localProxyInfo.lpServices,
|
|
277
|
+
'--region',
|
|
278
|
+
this.localProxyInfo.lpRegion,
|
|
279
|
+
'--capath',
|
|
280
|
+
directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH,
|
|
281
|
+
'--local-bind-address',
|
|
282
|
+
'0.0.0.0',
|
|
283
|
+
'-t',
|
|
284
|
+
this.localProxyInfo.lpDstAccessKey
|
|
285
|
+
];
|
|
286
|
+
this.localProxyInfo.lpProcess = await (0, spawner_detached_1.runDetachedProcess)(directories_1.SECURE_TUNNEL_BIN_PATH, args);
|
|
287
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.startLocalProxy');
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Stops SecureTunnel local proxy process
|
|
291
|
+
*/
|
|
292
|
+
async stopLocalProxy() {
|
|
293
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.stopLocalProxy');
|
|
294
|
+
if (!this.localProxyInfo.lpProcess) {
|
|
295
|
+
logger_1.logger.debug('No local proxy process running');
|
|
296
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.stopLocalProxy');
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
try {
|
|
300
|
+
logger_1.logger.debug(`About to kill local proxy: ${this.localProxyInfo.lpDstAccessKey}`);
|
|
301
|
+
await (0, spawner_detached_1.killDetachedProcess)(this.localProxyInfo.lpProcess, [
|
|
302
|
+
directories_1.SECURE_TUNNEL_BIN_PATH
|
|
303
|
+
]);
|
|
304
|
+
logger_1.logger.debug('SUCCESS: killing local proxy process');
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
logger_1.logger.error('ERROR: killing local proxy process:', e);
|
|
308
|
+
}
|
|
309
|
+
this.localProxyInfo = {
|
|
310
|
+
lpDstAccessKey: '',
|
|
311
|
+
lpRegion: '',
|
|
312
|
+
lpServices: '',
|
|
313
|
+
lpProcess: null
|
|
314
|
+
};
|
|
315
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.stopLocalProxy');
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* processes and validate notify message
|
|
319
|
+
* @param {string[]} message - message, which contains: clientAccessToken, region, services
|
|
320
|
+
*/
|
|
321
|
+
processNotifyMessage(message) {
|
|
322
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.processNotifyMessage');
|
|
323
|
+
const { clientAccessToken, region, services } = message;
|
|
324
|
+
const portMappingList = [];
|
|
325
|
+
if (clientAccessToken === '') {
|
|
326
|
+
throw new Error('ERROR: invalid destination access token');
|
|
327
|
+
}
|
|
328
|
+
if (!(0, cloud_mode_ready_1.isValidAwsRegion)(region)) {
|
|
329
|
+
throw new Error(`ERROR: invalid/unsupported region: ${region}`);
|
|
330
|
+
}
|
|
331
|
+
if (services.length === 0) {
|
|
332
|
+
throw new Error(`ERROR: services field is empty: ${region}`);
|
|
333
|
+
}
|
|
334
|
+
if (services.some((field) => field === '')) {
|
|
335
|
+
throw new Error(`ERROR: one service fields is empty: ${region}`);
|
|
336
|
+
}
|
|
337
|
+
if (services.some((service) => !service.startsWith(SecureTunnelServiceType.SSH) &&
|
|
338
|
+
!service.startsWith(SecureTunnelServiceType.HTTP))) {
|
|
339
|
+
throw new Error(`ERROR: one service fields is invalid: ${JSON.stringify(services)}`);
|
|
340
|
+
}
|
|
341
|
+
const sshEnabledPorts = this.reported.st_ports.filter((port) => port.type === SecureTunnelServiceType.SSH && port.enabled);
|
|
342
|
+
const sshServicePorts = services.filter((service) => service.startsWith(SecureTunnelServiceType.SSH));
|
|
343
|
+
const httpServicePorts = services.filter((service) => service.startsWith(SecureTunnelServiceType.HTTP));
|
|
344
|
+
if (sshServicePorts.length > 1) {
|
|
345
|
+
throw new Error(`ERROR: None or only 1 SSH port is allowed! sshEnabledPortsCount: ${sshEnabledPorts.length}`);
|
|
346
|
+
}
|
|
347
|
+
// the new SSH mismatch, but NOT the SSH, because that device without shadow
|
|
348
|
+
if (sshEnabledPorts.length !== sshServicePorts.length &&
|
|
349
|
+
sshServicePorts[0] !== SecureTunnelServiceType.SSH) {
|
|
350
|
+
throw new Error(`ERROR: SSH ports mismatch! sshEnabledPortsCount: ${sshEnabledPorts.length}, sshServicePortsCount: ${sshServicePorts.length}`);
|
|
351
|
+
}
|
|
352
|
+
if (this.httpProxyMap.length !== httpServicePorts.length) {
|
|
353
|
+
throw new Error(`ERROR: HTTP ports mismatch! httpMappedPortsCount: ${this.httpProxyMap.length}, httpServicePortsCount: ${httpServicePorts.length}`);
|
|
354
|
+
}
|
|
355
|
+
// this is the default case: just 1 SSH without any HTTP service
|
|
356
|
+
if (services.length === 1 &&
|
|
357
|
+
services[0] === defaultSecureTunnelPortInfo.type) {
|
|
358
|
+
portMappingList.push(defaultSecureTunnelPortInfo.port.toString());
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
// this is the multi port case, need port mapping to running services
|
|
362
|
+
sshServicePorts.forEach((port, index) => {
|
|
363
|
+
portMappingList.push(`${port}=${sshEnabledPorts[index].port}`);
|
|
364
|
+
});
|
|
365
|
+
httpServicePorts.forEach((port, index) => {
|
|
366
|
+
portMappingList.push(`${port}=${this.httpProxyMap[index].localhostPort}`);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
this.localProxyInfo.lpDstAccessKey = clientAccessToken;
|
|
370
|
+
this.localProxyInfo.lpRegion = region;
|
|
371
|
+
this.localProxyInfo.lpServices = portMappingList.join(',');
|
|
372
|
+
logger_1.logger.debug(`reported = ${JSON.stringify(this.reported.st_ports)}`);
|
|
373
|
+
logger_1.logger.debug(`localProxyInfo = ${JSON.stringify(this.localProxyInfo)}`);
|
|
374
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.processNotifyMessage');
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Downloads SecureTunnel local proxy, if it was not downloaded before
|
|
378
|
+
*/
|
|
379
|
+
async downloadSecureTunnel() {
|
|
380
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.downloadSecureTunnel');
|
|
381
|
+
if (await (0, util_1.JsSpawner)().exists(directories_1.SECURE_TUNNEL_BIN_PATH)) {
|
|
382
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.downloadSecureTunnel');
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
const [arch, linuxDistro, osVersion] = await Promise.all([
|
|
386
|
+
(0, system_info_1.getArch)(),
|
|
387
|
+
(0, system_info_1.getDistribution)(),
|
|
388
|
+
(0, system_info_1.getOsVersion)()
|
|
389
|
+
]);
|
|
390
|
+
logger_1.logger.info('Downloading SecureTunnel local proxy ...');
|
|
391
|
+
const url = `${urls_1.aaiArtifactsBucketUrl}/securetunnel/${linuxDistro}/${osVersion}/${arch}/${directories_1.SECURE_TUNNEL_BIN_NAME}`;
|
|
392
|
+
await (0, util_1.JsSpawner)().mkdirp((0, path_1.join)(paths_1.AAI_DIR, directories_1.SECURE_TUNNEL_BIN_DIR));
|
|
393
|
+
await (0, download_file_1.downloadFile)({
|
|
394
|
+
url,
|
|
395
|
+
path: directories_1.SECURE_TUNNEL_BIN_PATH,
|
|
396
|
+
errorMessage: `Secure Tunnel bin for ${linuxDistro} ${osVersion} ${arch} not found}`
|
|
397
|
+
});
|
|
398
|
+
await (0, util_1.JsSpawner)().run({
|
|
399
|
+
exe: 'chmod',
|
|
400
|
+
args: ['+x', directories_1.SECURE_TUNNEL_BIN_PATH]
|
|
401
|
+
});
|
|
402
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.downloadSecureTunnel');
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Gets next available localhost port
|
|
406
|
+
*/
|
|
407
|
+
getNextAvailablePort() {
|
|
408
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.getNextAvailablePort');
|
|
409
|
+
let lastLocalhostPort = ST_START_PORT_NUMBER;
|
|
410
|
+
if (this.httpProxyMap.length > 0) {
|
|
411
|
+
lastLocalhostPort = this.httpProxyMap.reduce((maxPort, proxy) => {
|
|
412
|
+
return proxy.localhostPort > maxPort ? proxy.localhostPort : maxPort;
|
|
413
|
+
}, ST_START_PORT_NUMBER);
|
|
414
|
+
}
|
|
415
|
+
// for now just check whether we are using specific port number
|
|
416
|
+
// TODO: in the future we need to check whether some other services are using a specific port
|
|
417
|
+
// possible way to check taken ports: "sudo netstat -tuln | grep <port_number>""
|
|
418
|
+
logger_1.logger.debug(`lastLocalhostPort: ${(lastLocalhostPort + 1).toString()}`);
|
|
419
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.getNextAvailablePort');
|
|
420
|
+
return lastLocalhostPort + 1;
|
|
421
|
+
}
|
|
422
|
+
sortPorts(desired) {
|
|
423
|
+
logger_1.logger.debug('-> SecureTunnelHandlerSingleton.sortPorts');
|
|
424
|
+
const sortedPorts = JSON.parse(JSON.stringify(this.reported));
|
|
425
|
+
sortedPorts.st_ports.sort((a, b) => {
|
|
426
|
+
const aOriginalIndex = desired.st_ports.findIndex((item) => item.type === a.type && item.ip === a.ip && item.port === a.port);
|
|
427
|
+
const bOriginalIndex = desired.st_ports.findIndex((item) => item.type === b.type && item.ip === b.ip && item.port === b.port);
|
|
428
|
+
return aOriginalIndex - bOriginalIndex;
|
|
429
|
+
});
|
|
430
|
+
logger_1.logger.debug('<- SecureTunnelHandlerSingleton.sortPorts');
|
|
431
|
+
return sortedPorts;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
exports.SecureTunnelHandlerSingleton = SecureTunnelHandlerSingleton;
|
|
435
|
+
//# sourceMappingURL=secure-tunneling.js.map
|