{"id":21994778,"url":"https://github.com/allow2/allow2automate-tigermom","last_synced_at":"2026-04-13T13:32:51.520Z","repository":{"id":146494224,"uuid":"397110802","full_name":"Allow2/allow2automate-tigermom","owner":"Allow2","description":null,"archived":false,"fork":false,"pushed_at":"2021-08-17T05:17:44.000Z","size":97,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-23T04:16:10.424Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Allow2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-17T05:17:43.000Z","updated_at":"2021-08-17T05:17:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"ba73078c-319c-4dae-8053-429f64e12641","html_url":"https://github.com/Allow2/allow2automate-tigermom","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"Allow2/allow2automate-plugin","purl":"pkg:github/Allow2/allow2automate-tigermom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Allow2%2Fallow2automate-tigermom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Allow2%2Fallow2automate-tigermom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Allow2%2Fallow2automate-tigermom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Allow2%2Fallow2automate-tigermom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Allow2","download_url":"https://codeload.github.com/Allow2/allow2automate-tigermom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Allow2%2Fallow2automate-tigermom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31754989,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T13:27:56.013Z","status":"ssl_error","status_checked_at":"2026-04-13T13:21:23.512Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T21:10:27.117Z","updated_at":"2026-04-13T13:32:51.493Z","avatar_url":"https://github.com/Allow2.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# plugin template project for Allow2Automate\n\nExtend Allow2Automate with whatever functionality you like.\n\n## how to publish a plugin\n\nThere are a few steps involved in setting up a new plugin and testing and publishing it.\n\n1. first you need to understand how the plugins work and design and/or prototype your plugin\n2. you can use this project as a basis for your plugin\n3. once you get it compiling, you can manually insert it into the plugins directory for allow2automate\nand start allow2automate. It will detect your plugin and load it as if it was loaded from the published plugins directory.\n4. \n\n# Plugin structure\n\nAllow2automate plugins have 2 components. Most plugins will require both as they intend to both\nhave a control interface and a service mechanism. Obviously then you need to be able to communicate\nbetween the 2 processes and also persist state.\n\nThe standard use case would be for extending Allow2 control to a web service for example. In this case, the user\nwould install your plugin, this loads into the main electron process immediately, but with a blank default configuration.\nYou can set things up ready to go, but don't really have much to do yet.\n\nOnce the user switches to your tab, the Component side of the plugin is loaded and presented to allow them to alter their\nconfiguration. Here you can present interfaces to allow them to remotely authenticate with the web service, set up rules and\nassign children from their account.\n\nWhen you persist those changes, they are fed to your Service Mechanism in the back end, and that's where you actually implement\nthe controls.\n\nSee the allow2automate-wemo, allow2automate-ssh and allow2automate-battle.net for examples on how to implement various control bridges.\n\n## Control Interface\n\nEach plugin must export a react component named \"TabContent\". This is the control interface that\nloads into the allow2automate. This component is transient and is only used to configure the plugin\nfeatures and display status. It can achieve control in 2 ways. The main control it has is to change\npersisted state upon which the service mechanism relies to enforce behaviour. You also can use IPC\nto directly communicate with your Service Mechanism component, but this really should be used sparingly.\n\nBe very aware that the component is transient, it is only loaded generally when the user actually\nswitches to your plugin tab, it also can be unloaded if they switch to a different tab or closes the\nallow2automate window. For that reason, and because it is in the render process of the electron app,\nit should not set up any persistent behaviours, timers, background processes or anything really other\nthan simple displaying status and providing interactive controls for users to configure your plugin.\n\nAll the control mechanism stuff needs to live in the Service Mechanism of your plugin, not here.\n\n## Service Mechanism\n \nEach plugin must export a function named \"plugin\" that takes a single argument, being a \"context\" object.\nThe context object will pass in several mechanisms and functions.\n\nThis is where you should set up your actual comms mechanisms. You listen to changes in state here, both\nfrom the user changing configurations, and from Allow2 triggering events, such as telling you gaming time is now over\nYou can also tell allow2automate about usage in whatever mechanism you have linked and Allow2 will use this to\ntrack usage.\n\nYou have a couple of optional built in callbacks you may implement to help you with managing the plugin lifecycle.\n\nonLoad()\nonSetEnabled(Boolean)\nonUnload()\n\nThis part of the plugin is the engine room and pretty much resides permanently in memory after being loaded. You can spawn\nlong running processes (using callbacks - be aware this is still on the main electron process, so play nicely).\nYou can also set timers, do remote calls to web services/etc.\n\n## state persistence\n\nBoth your Control Interface (React Component for tab content on the render process) and your Service Mechanism (on the main process)\nhave access to, get nbotified of changes to, and are able to send instructions to update the configuration state in the allow2automate\nmain store. This should really be your primary mechanism for communication as it serves to both communicate configurationsand also\npersist them over restarts of the allow2automate app.\n\n## inter-process communication (IPC)\n\nAllow2automate provides a bi-directional ipc channel for all plugins, it is an element of the plugin component mechanism.\nYou also needn't worry about clashes as all ipc comms you initiate from either end is namespaced automatically, so you\nshouldn't clash with anyone else.\n\n# Cloning this project as a starting point\n\nStart by cloning this project\n\n```bash\ngit clone https://allow2automate-plugin\n```\n\n# Publishing\n\nThis project has a built in .github workflow to publish your plugin to npm (needed for installation by other users).\nYou only need to set one secret in your github repo being your \"NPM_TOKEN\", just generate one under your publishing account\non npm.org and set that token in your repo secrets in github. Then when you check in changes on your main branch (or merge\npull requests) and the package.json version number is updated, this workflow will auto-publish your plugin to npm under your account.\n\nYou can then simply type in the plugin name in any allow2automate instance to download and install your new plugin.\n\n## plugin directory\n\n(coming soon)\n\n## plugin upgrades and notifications of new versions\n\n(coming soon)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallow2%2Fallow2automate-tigermom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallow2%2Fallow2automate-tigermom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallow2%2Fallow2automate-tigermom/lists"}