{ "module": "messenger", "version": "1", "slug": "msgr", "runs-as": "messenger", "seats": [ { "name": "operator-channel", "scope": "mesh", "serves": [ "open", "history", "notify", "tell", "asks" ], "accepts": [ "ask", "cancel" ], "emits": [ "decided" ], "by-caller": [ "ask", "cancel", "decided" ], "records": [ "asks" ] }, { "name": "channel", "scope": "mesh", "kinded": true, "accepts": [ "show", "edit", "send" ] }, { "name": "intake", "scope": "mesh", "kinded": true, "emits": [ "choice", "link", "failed", "standing" ], "proofs": [ "code" ] } ], "claims": [ { "name": "operator-channel", "scope": "mesh", "serves": [ "open", "history", "notify", "tell", "asks" ] } ], "uses": [ "channel" ], "consumes": [ "mesh-controller.condition-raised", "mesh-controller.condition-changed", "mesh-controller.condition-cleared", "mesh-controller.plan-moved", "intake.choice", "intake.link", "intake.failed", "intake.standing" ], "emits": [ "refused" ], "invokes": [ "seat:mesh-controller.conditions", "seat:mesh-controller.root-free", "seat:issue-tracker.tracking" ], "state": [ "open", "sent", { "name": "asks", "ttl-seconds": 2592000 }, "identities", "walks" ], "own-secrets": { "broker": "${dir:state}/broker" }, "secrets-owner": "messenger", "tools": [ "messenger_status", "messenger_recent", "messenger_test", "messenger_preview", "messenger_check", "messenger_identities", "messenger_unlink" ], "config": { "time-zone": { "type": "string", "description": "The time zone every time a message says is said in, an IANA name such as Europe/Brussels; empty is this machine's own zone.", "trusted": true, "default": "" }, "desktop-machines": { "type": "list", "description": "The machines whose desktop showed the operator's messages, by node name. Nothing in this module reads it since the desk channel took the desktop over; it is taken so the file stays as a layer that still sets it makes it, until that layer drops it.", "trusted": true, "default": [] }, "only-what-needs-me": { "type": "list", "description": "The kinds of channel set to say only what needs the operator: a walk that delivered with nothing held and nothing open is not told there (ADR 0308 ยง4); empty is none.", "trusted": true, "default": [] } }, "resources": [ { "id": "account", "type": "user", "name": "messenger", "shell": "/usr/bin/nologin", "home": "/var/lib/messenger" }, { "id": "state", "type": "directory", "mode": "0700", "place": ".", "owner": "messenger" }, { "id": "settings", "type": "file", "path": "${dir:state}/settings.json", "mode": "0600", "takes-config": ["time-zone", "desktop-machines", "only-what-needs-me"], "merge": "json", "template": "files/settings.json", "owner": "messenger" } ], "build": { "artifacts": [ { "name": "tools", "kind": "bundle", "language": "go", "system": "arch", "from": "cmd/messenger", "binary": "messenger", "loads": [ "messenger" ], "env": { "MESH_MESSENGER_SETTINGS": "${dir:state}/settings.json", "MESH_MESSENGER_STATE": "${dir:state}" } }, { "name": "files", "kind": "archive", "from": "files" } ] } }