# -*- coding: utf-8 -*- """1B Space Compositor Core addon. This package contains the backend models, controllers, and the OWL library service/component registrations for the compositor. Public Python API: - :class:`compositor.app` — application catalog model - :class:`compositor.session` — per-browser-tab session (mail.thread mixin) - :class:`compositor.audit.log` — append-only audit log - :class:`CompositorController` — HTTP controllers Public JS API (via ``@one_os_compositor/*`` imports): - ``@one_os_compositor/services/compositor_service`` — main service - ``@one_os_compositor/components/compositor_canvas`` — canvas component - ``@one_os_compositor/components/compositor_surface`` — single surface wrapper """ from . import models from . import controllers def _post_init_hook(env): """Called after the addon is installed. Sets the default JWT secret if not already configured. The secret is stored in ``ir.config_parameter`` so it can be rotated without restarting Odoo. :param env: Odoo environment. """ config_param = env["ir.config_parameter"] if not config_param.get_str("compositor.jwt_secret"): # Auto-generate a strong secret on first install import secrets secret = secrets.token_urlsafe(48) config_param.set_str("compositor.jwt_secret", secret) env["ir.logging"].sudo().create({ "name": "one_os_compositor", "type": "server", "level": "INFO", "message": "Compositor JWT secret auto-generated on first install.", "dbname": env.cr.dbname, })