### Is there an existing issue for this?

- [X] I have searched the existing issues

### Enhancement description

Kinesis Mock is preparing a switch to a Javascript executable offering, which will remove the old GraalVM executables. This should be much easier to work with from Localstack's perspective, as well as remove the java dependency for users. But I'm unsure as to how to approach this in Localstack's code base, and am looking for some guidance / direction.

The current plan is to have 2 GitHub release assets:
- main.js
- main.js.map

To start the service, you'd simply do `./main.js`, as it should be an executable. You can use `node main.js` as well. 

I also plan to publish this to NPM if that is an easier grab for localstack. 

References:

https://github.com/etspaceman/kinesis-mock/pull/531
https://github.com/etspaceman/kinesis-mock/blob/scalajs/docker/Dockerfile


### 🧑‍💻 Implementation

Update these lines to execute a nodejs command instead:

https://github.com/localstack/localstack/blob/master/localstack/services/kinesis/kinesis_mock_server.py#L101

Upgrade this to the newest version (planning for 0.4.0):

https://github.com/localstack/localstack/blob/master/localstack/services/kinesis/kinesis_mock_server.py#L101

Update this to get the `main.js` file for all platforms:

https://github.com/localstack/localstack/blob/master/localstack/services/kinesis/kinesis_mock_server.py#L101



### Anything else?

_No response_
default_startup_timeout = 60
    def __init__(self):
        self._lock = threading.RLock()
        self._servers: dict[str, KinesisMockServer] = {}
    def get_server_for_account(self, account_id: str) -> KinesisMockServer:
        if account_id in self._servers:
            return self._servers[account_id]
        with self._lock:
            if account_id in self._servers:
                return self._servers[account_id]
            LOG.info("Creating kinesis backend for account %s", account_id)
            self._servers[account_id] = self._create_kinesis_mock_server(account_id)
            self._servers[account_id].start()
            if not self._servers[account_id].wait_is_up(timeout=self.default_startup_timeout):
                raise TimeoutError("gave up waiting for kinesis backend to start up")
            return self._servers[account_id]
    def shutdown_all(self):
        with self._lock:
            while self._servers:
                account_id, server = self._servers.popitem()
                LOG.info("Shutting down kinesis backend for account %s", account_id)
                server.shutdown()
    def _create_kinesis_mock_server(self, account_id: str) -> KinesisMockServer:
        """
        Creates a new Kinesis Mock server instance. Installs Kinesis Mock on the host first if necessary.
        Introspects on the host config to determine server configuration:
        config.dirs.data -> if set, the server runs with persistence using the path to store data
        config.LS_LOG -> configure kinesis mock log level (defaults to INFO)
        config.KINESIS_LATENCY -> configure stream latency (in milliseconds)