Browser extensions
An extension of your app is a side panel for Chrome and Edge, built on @haatlabs-core/extension-ui and @haatlabs-core/extension-kit. It signs in through your app and calls your app's API as the person signed in.
npx @haatlabs-core/cli create my-app-extension --kind extension --app-domain my-app.exampleSigning in: the connect page
Every app made with the platform has a connect page at https://app.<domain>/connect/extension. A person signed in to the app opens it from the extension, and the page hands the extension a key of its own. The app accepts only the extensions whose ids are in its CONNECTABLE_EXTENSION_IDS.
make key # the extension's id: add it to the app's CONNECTABLE_EXTENSION_IDS
make extension # apps/extension/dist, to load unpacked in chrome://extensionsThe stores
make extension-zip writes the upload for the Chrome Web Store and Edge Add-ons, without the pinned key, which the store replaces with its own. Once the store gives the extension its id, add that id to CONNECTABLE_EXTENSION_IDS too.
Firefox
Firefox's web pages cannot hand a key to an extension, so the connect page signs in Chrome and Edge only. An app with an OAuth server of its own can sign an extension in on Firefox with the kit's startOAuthPkce, and manifestFor('firefox', …) writes the Firefox manifest.