text: #!/usr/bin/env node
  
  import fs from "fs";
  
  import jwt from "jsonwebtoken";
  import yargs from "yargs";
  import { hideBin } from "yargs/helpers";
  
  // Generate the JWT license key using the provided options.
  const generate = (argv) => {
    const {
      privateKey: privateKeyPath,
      keyPassphrase: keyPassphrasePath,
      expiration,
      customer,
      devices,
      note,
      tier,
    } = argv;
  
    const unixExpiration = Math.floor(expiration / 1000);
  
    const privateKey = fs.readFileSync(privateKeyPath);
    const keyPassphrase = fs.readFileSync(keyPassphrasePath).toString().trim();
  
    const licensePayload = {
      iss: "Fleet Device Management Inc.",
      exp: unixExpiration,
      sub: customer,
      devices,
      note,
      tier,
    };
    console.log(
      jwt.sign(
        licensePayload,
        { key: privateKey, passphrase: keyPassphrase },
        { algorithm: "ES256" }
      )
    );
  };
  
  // Like Date.parse but error if date cannot be parsed.
  const coerceDate = (str) => {
    const date = Date.parse(str);
    if (isNaN(date)) {
      throw new Error(`'${str}' cannot be parsed as date`);
    }
    return date;
  };
  
  yargs(hideBin(process.argv))
    .command(
      "generate",
      "Generate a new license key",
      (cmd) => {
        cmd.option({
          "private-key": {
            description: "Path to private key for signing",
            type: "string",
            required: true,
          },
          "key-passphrase": {
            description: "Path to file containing private key passphrase",
            type: "string",
            required: true,
          },
          expiration: {
            description: "Expiration timestamp of license",
            type: "string",
            coerce: coerceDate,
            required: true,
          },
          customer: {
            description: "Name of customer",
            type: "string",
            required: true,
          },
          devices: {
            description: "Licensed device count",
            type: "number",
            required: true,
          },
          note: {
            description: "Additional note to add to license",
            type: "string",
          },
          tier: {
            description: "License tier",
            default: "basic",
            type: "string",
          },
        });
      },
      generate
    )
    .demandCommand(1, "Command must be provided") // Require a command
    .strict() // Reject unknown flags
    .version(false) // Disable version option
    .help()
    .alias("help", "h")
    .parse();
  