{ "id": "overflow-tap", "name": "Overflow Tap", "version": "1.0.0", "proddash": ">=1.11.0", "description": "Switches Overflow Tap destinations from keywords in ProPresenter slide notes", "permissions": [ { "kind": "local-network", "reason": "Reaching ProPresenter on this network" } ], "client": "client.js", "server": "server.js", "style": "style.css", "minSize": { "w": 2, "h": 2 }, "defaultSize": { "w": 4, "h": 3 }, "configGroups": { "ProPresenter": { "help": "The ProPresenter whose slide notes carry the keywords. Enable the network in ProPresenter's Preferences › Network and enter the host and port shown there. Only the live slide's notes are read — nothing on the stage screens changes." }, "Overflow": { "collapsed": "whenSet", "help": "API credentials from the Overflow Dashboard: Developers › API Keys (a READ_WRITE key). Tap groups and destinations are read from the account once these are saved; the groups list below fills in from there." }, "Keywords": { "help": "One keyword per line, as `keyword = Destination name` — the destination exactly as it is named in Overflow's Tap module (or its id). Add ` @ Group A, Group B` to a line to switch only those groups instead of the ones chosen above. When a slide's notes carry one of these keywords, every chosen group is pointed at that destination; a slide without a keyword changes nothing. When several match, the first line wins." }, "Alerts": { "toggle": "alertEnabled", "collapsed": true, "help": "Flash the dashboards listening on this channel when a switch fails — Overflow unreachable or refusing the change — so someone can fix Tap by hand before the moment passes." } }, "configSchema": { "propresenter": { "type": "endpoint", "label": "ProPresenter", "group": "ProPresenter", "default": { "host": "", "port": 1025 } }, "password": { "type": "password", "label": "API password", "group": "ProPresenter", "default": "", "help": "Only if a password is set in ProPresenter's network preferences." }, "clientId": { "type": "string", "label": "Client ID", "group": "Overflow", "default": "" }, "apiKey": { "type": "password", "label": "API key", "group": "Overflow", "default": "" }, "groups": { "type": "multiselect", "label": "Tap groups", "group": "Overflow", "default": [], "optionsRoute": "/groups", "help": "The groups a keyword switches. None chosen means every group on the account." }, "keywords": { "type": "text", "label": "Keywords", "group": "Keywords", "default": "", "help": "One per line — give = Give Online" }, "matching": { "type": "select", "label": "Match", "group": "Keywords", "default": "word", "options": [ { "value": "word", "label": "Whole word in the notes" }, { "value": "anywhere", "label": "Anywhere in the notes" }, { "value": "line", "label": "On its own line" } ], "help": "Whole word keeps `give` from firing on `forgiveness`; anywhere is what Overflow's own helper does." }, "alertEnabled": { "type": "switch", "label": "Alert when a switch fails", "group": "Alerts", "default": false }, "alertChannel": { "type": "number", "label": "Channel", "group": "Alerts", "default": 1, "min": 1, "max": 6, "help": "1–6; each dashboard chooses the channels it listens to in its Layouts menu." } }, "instanceSchema": { "showDestination": { "type": "switch", "label": "Destination", "default": true }, "showGroups": { "type": "switch", "label": "Groups", "default": true }, "showSlide": { "type": "switch", "label": "Slide match", "default": true }, "showHistory": { "type": "switch", "label": "History", "default": true } } }