A launchWebAuthFlow polyfill using browser popup
npm install webext-launch-web-auth-flowPolyfill launchWebAuthFlow with popups or browser tabs.
``bash`
npm install webext-launch-web-auth-flow
`js
// With ESM Modules
import launchWebAuthFlow from "webext-launch-web-auth-flow";
// With CommonJS
const launchWebAuthFlow = require("webext-launch-web-auth-flow");
`
If you use TypeScript, you have to install @types/webextension-polyfill:
`bash`
npm install @types/webextension-polyfill
You can find it under the dist folder, or download from unpkg.
1. Builtin launchWebAuthFlow doesn't reuse the browser session. This library does.launchWebAuthFlow
2. Builtin doesn't allow custom redirect_uri. This library does.
`js`
{
"background": {
...
"persistent": true
},
"permissions": [
"webRequest",
"webRequestBlocking",
"webNavigation",
"https://my.redirect.uri/*"
]
}
To polyfill launchWebAuthFlow, this library uses following API/permissions:
1. windows and tabs - this library launches a window dialog (or tab in Firefox android) to login. Most methods from these APIs can be used without explicitly declaring any permissions in the extension's manifest file, therefore there's no need to mention them in the code above.webRequest
2. - this library cannot be used with event pages, otherwise you'll get this error. To avoid it, set your background page persistent key to true.webRequestBlocking
3. this cancels the request to redirect_uri so it won't leak the token/code to redirect_uri (or redirect_uri is unresolveable e.g. the URL from identity.getRedirectURL).webNavigation
4. - the login dialog is minimized unless there is no redirect. It checks the loading state using webNavigation.onDOMContentLoaded.
This library references the browser global variable, which is from Firefox. To make it work on Chrome (which uses the chrome global variable instead) install webextension-polyfill.
- Currently there is no good way to create an "inactive minimized dialog" on both Chrome and Firefox. Ref:
This module exports a single function.
`js`
async launchWebAuthFlow({
url: String,
redirect_uri: String,
interactive?: Boolean = false,
alwaysUseTab?: Boolean = false,
windowOptions?: Object
}) => finalUrl: String
See the official document for url, redirect_uri, and interactive options. Note that redirect_uri is required in this library.
By default, this library uses a popup to display the login page. If popups are unavailable (which usually happens on mobile browsers), it uses a tab instead. Set alwaysUseTab to true to always use a tab.
Use windowOptions to set extra properties that will be sent to browser.windows.create.
- 0.1.2 (Nov 28, 2022)
- Add: TypeScript declaration file.
- 0.1.1 (Feb 18, 2021)
- Add: alwaysUseTab option.windowOptions` option.
- Add:
- 0.1.0 (Aug 15, 2020)
- First release.