#!/usr/local/bin/node

// nodejs-slim container healthcheck (where there is no curl, only node)
//
// Usage:
// ./healthcheck.js url [expectedStatusCode:200]
//
// Example in docker compose expecting http://localhost:9999 to respond with a 401:
// ```
//   healthcheck:
//     test: ./healthcheck.js http://localhost:9999
// ```

const DEFAULT_STATUS_CODE = 200;

(async () => {
  const url = process.argv?.[2];
  if (!url) {
    console.error("url parameter not specified")
    process.exit(1)
  }

  const expectedStatusCode = process.argv?.[3] || DEFAULT_STATUS_CODE;

  // check expected vs actual status code
  const response = await fetch(url);
  if (parseInt(expectedStatusCode) !== response.status) {
    console.error(`expected status code ${expectedStatusCode} but received actual ${response.status}`)
    process.exit(1);
  }
})();