Skip to content

packages/engine/scram-node/targets/scram-node/src/AsyncScramWorker.cpp

Source code

cpp
#include <boost/program_options.hpp>
#include <exception>
#include "AsyncScramWorker.h"

#include "targets/scram-cli/utils/RunScram.h"
#include "targets/scram-cli/utils/ParseArguments.h"

namespace po = boost::program_options;

AsyncScramWorker::AsyncScramWorker(Napi::Function& callback, std::vector<std::string> args)
  : Napi::AsyncWorker(callback), args(std::move(args)) {};

void AsyncScramWorker::Execute() {
  // Convert vector of strings to argc and argv format for command-line parsing.
  std::vector<char*> argv;
  for(std::string &s: args) {
    argv.push_back(&s[0]);
  }
  argv.push_back(NULL);

  try {
    // Parse arguments and run the scram command, catching any exceptions.
    po::variables_map vm;
    ScramCLI::ParseArguments(argv.size() - 1, argv.data(), &vm);
    ScramCLI::RunScram(vm);
  } catch (const std::exception& e) {
    // If an exception occurs, record the error message.
    SetError(e.what());
  }
}

void AsyncScramWorker::OnOK() {
  Napi::HandleScope scope(Env());
  Callback().Call({Env().Null()});
}

Updated on 2025-11-11 at 16:51:09 +0000