Upload Chrome Extensions to the Chrome Web Store
npm install chrome-webstore-upload> A small node.js module to upload/publish extensions to the Chrome Web Store.
If you're looking to upload/publish from the CLI, then use chrome-webstore-upload-cli.
```
npm install --save-dev chrome-webstore-upload
You will need a Google API clientId, clientSecret and refreshToken. Use the guide.
All methods return a promise.
`javascript
import chromeWebstoreUpload from 'chrome-webstore-upload';
const store = chromeWebstoreUpload({
extensionId: 'ecnglinljpjkbgmdpeiglonddahpbkeb',
clientId: 'xxxxxxxxxx',
clientSecret: 'xxxxxxxxxx',
refreshToken: 'xxxxxxxxxx',
});
`
You can upload a zip file, crx file, or a directory. If you provide a directory, it will be automatically zipped. Crx files are only supported as path, not as stream.
`javascript
import fs from 'fs';
// Upload a zip file
const myZipFile = fs.createReadStream('./mypackage.zip');
const token = 'xxxx'; // optional. One will be fetched if not provided
const maxAwaitInProgressResponseSeconds = 60; // optional. If the API response is IN_PROGRESS, this method will wait until it becomes successful, or until the specified timeout
const response = await store.uploadExisting(myZipFile, token, maxAwaitInProgressResponseSeconds);
// response is a Resource Representation
// https://developer.chrome.com/webstore/webstore_api/items#resource
`
`javascript`
// Upload a directory (it will be zipped automatically)
const response = await store.uploadExisting('./path/to/extension-directory', token, maxAwaitInProgressResponseSeconds);
// The directory must contain a manifest.json file
`javascript`
// Upload a .zip or .crx file by path
const response = await store.uploadExisting('./path/to/extension.zip', token, maxAwaitInProgressResponseSeconds);
// or
const response = await store.uploadExisting('./path/to/extension.crx', token, maxAwaitInProgressResponseSeconds);
`javascript`
const target = 'default'; // optional. Can also be 'trustedTesters'
const token = 'xxxx'; // optional. One will be fetched if not provided
const deployPercentage = 25; // optional. Will default to 100%.
const response = await store.publish(target, token, deployPercentage);
// response is documented here:
// https://developer.chrome.com/webstore/webstore_api/items#publish
`javascript`
const projection = "DRAFT"; // optional. Can also be 'PUBLISHED' but only "DRAFT" is supported at this time.
const token = "xxxx"; // optional. One will be fetched if not provided
const response = await store.get(projection, token);
// response is documented here:
// https://developer.chrome.com/docs/webstore/webstore_api/items#get
`javascript`
const token = store.fetchToken();
// token is astring
- If you plan to upload _and_ publish at the same time, use the fetchToken method, and pass it to both uploadExisting and publish` as the optional second parameter. This will avoid those methods making duplicate calls for new tokens.
- webext-storage-cache - Map-like promised cache storage with expiration. Chrome and Firefox
- webext-dynamic-content-scripts - Automatically registers your content_scripts on domains added via permission.request
- Awesome-WebExtensions - A curated list of awesome resources for WebExtensions development.
- More…