CREATE FUNCTION _api.sign_jwt( _role TEXT, _user_id INTEGER ) RETURNS sys.JWT LANGUAGE plpgsql VOLATILE AS $BODY$ DECLARE _jwt_secret TEXT; _token sys.JWT; BEGIN SELECT jwt_secret INTO _jwt_secret FROM sys.database_info WHERE name = current_database(); SELECT public.sign( row_to_json(r), _jwt_secret ) INTO _token FROM ( SELECT _role AS role, _user_id AS user_id, extract(epoch FROM now())::integer + (60 * 60 * 24) AS exp ) r; RETURN _token; END $BODY$; GRANT EXECUTE ON FUNCTION _api.sign_jwt(TEXT, INTEGER) TO rest_anon, rest_user; GRANT SELECT ON TABLE sys.database_info TO rest_anon, rest_user;