node.jsdockeroktaopen-fga

Auto-generate OpenFGA json model when saving .fga DSL file


I've setup an OpenFGA project, using the provided docker container. I've written a short node.js script to initialise the store locally, setup the model, add some test tuples, and add some assertions, then test all these. With typescript and tsx watch, these tests will run anytime I add a new tuple or assertion or make any code changes. Happy days.

However, every time I edit my authModel.fga DSL file, I need to convert it to JSON manually before I can re-run my tests. The best way I've found to do this so far is to use the VSCode extension command, and then copy-paste the output.

Ideally, I'd like to script the transformation so it automatically runs whenever the model file changes. I'd like everything self-contained so that other users can check out the codebase, bootstrap, and go. We use docker and docker-compose for this for all our usual node modules.

I saw there is a docker container for the OpenFGA CLI, but I couldn't figure out how to make it transform my model and output to a JSON file.

This is the closest I got:

docker run -it openfga/cli model transform "$(cat packages/fga/model/authModel.fga)" > packages/fga/model/authModel.json

...but this seems to mangle the output JSON with a bunch of weird characters like this:

[1m{[22m[m
[m[m  [m[34;1m"[0;22m[34;1mschema_version[0;22m[34;1m"[0;22m[1m:[22m[32m"[0m[32m1.1[0m[32m"[0m[1m,[22m[m
[m[m  [m[34;1m"[0;22m[34;1mtype_definitions[0;22m[34;1m"[0;22m[1m:[22m[m [m[1m[[22m[m
[m[m    [m[1m{[22m[m

Any ideas?


Solution

  • try this script

    docker run -v $(pwd):/app  -it openfga/cli model transform --file=app/src/main/resources/domain.fga | sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g" > src/main/resources/domain.json
    

    this part will remove weird characters from the output

    sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g"