personium-engine icon indicating copy to clipboard operation
personium-engine copied to clipboard

How about writing Engine Script Handler in module style.

Open yoh1496 opened this issue 3 years ago • 0 comments

I think it would be nice if I can write Engine Script Handler as module.

For example,

const { something } = require("./submodule");

exports.handler = function(request) {
  const result = something.do();
  return {
    status: 200,
    headers: {"Content-Type": "application/json"},
    body: [ JSON.stringify(result)],
  };
};

Current part of calling function is below.

https://github.com/personium/personium-engine/blob/develop/src/main/java/io/personium/engine/PersoniumEngineContext.java#L367

        Object fObj = scope.get("fn_jsgi", scope);
        Object result = null;
        if (!(fObj instanceof Function)) {
            log.warn("fn_jsgi not found");
            throw new PersoniumEngineException("Server Error", PersoniumEngineException.STATUSCODE_SERVER_ERROR);
        }

        Object[] functionArgs = {jsReq.getRequestObject() };

        previousPhaseTime = System.currentTimeMillis();

        Function f = (Function) fObj;
        result = f.call(cx, scope, scope, functionArgs);

I think this issue could be solved with modifing here with below steps.

  1. load module
  2. call function loadedmodule.handler
  3. return result

Merits

  • Easy to test
    The script which is written in module style can be import easily from local.
  • Free from personium specific rules The rule the handle function must be written on first place

Demerits

  • Incompability

How is this?

yoh1496 avatar Jul 21 '21 08:07 yoh1496