webext-buildtools builder for deploying to Chrome Webstore. Based on chrome-webstore-upload
npm install webext-buildtools-chrome-webstore-builder
If you need a complete solution for Web Extension build/deploy, go to
webext-buildtools-integrated-builder repo.
To read what are webext-buildtools and builders go to
webext-buildtools-builder-types repo.
npm install webext-buildtools-chrome-webstore-builderBuilder doesn't allow publish a new extension, only update the existing one (specified by extensionId in options)
with new version.
js
const ChromeWebstoreBuilder = require('webext-buildtools-chrome-webstore-builder').default;
const fs = require('fs-extra');const options = { ... }; // see description below
const logMethod = console.log;
const builder = new ChromeWebstoreBuilder(options, logMethod);
// You can omit this, manifest will be extracted from zip file
builder.setInputManifest(await fs.readJson('./ext_dir/package.json'));
builder.setInputZipBuffer(await fs.read('./packed.zip'));
builder.requireUploadedExt();
builder.requirePublishedExt();
builder.requirePublishedCrxFile();
const buildResult = await builder.build();
` $3
Options object described in declarations/options.d.tsSee how to get
logMethod for pretty output.#### apiAccess
To setup API access you need to specify
clientId, clientSecret and refreshToken in options.apiAccess.
To find out how to obtain them you can read:
* Using the Chrome Web Store Publish API
* How to generate Google API keysAlternatively, you can directly set valid
options.accessToken (be sure it's not expired). $3
1. setInputManifest(...). Optional. Object with parsed extension's package.json. Will be extracted from zip if not specified.
2. setInputZipBuffer(...). Buffer with zipped extension dir. Required to upload extension.You can use webext-buildtools-dir-reader-mw
to generate needed inputs from extension directory.
$3
#### uploaded ext
Require to upload extension to Chrome Web Store (first step before publish)
Required options:
extensionId, apiAccess or accessToken
Require methods: requireUploadedExt()
Assets:
const uploadInfo = buildResult.getAssets().uploadedExt.getValue()
Contains information about extension before and after upload
upload info definition#### published ext
Require to publish extension to Chrome Web Store (second step).
Normally is used with
requireUploadedExt(), but can be used to publish already uploaded version
Required options:
extensionId, apiAccess or accessToken
Require methods: requirePublishedExt()
Assets:
const publishInfo = buildResult.getAssets().publishedExt.getValue()
publish info definition#### published crx file
Download published crx file from Chrome Web Store (undocumented feature). Normally is
used together with
requireUploadedExt() and requirePublishedExt(), but can be used
separately to download crx file for extensionId specified in options. Required options:
downloadCrx.outCrxFilePath (for not temporary file), extensionId
Require methods: requirePublishedCrxFile(), requirePublishedCrxBuffer()
Assets:
const crxFilePath = buildResult.getAssets().publishedCrxFile.getValue()
const crxBuffer = buildResult.getAssets().publishedCrxBuffer.getValue()$3
builder.build() call can be rejected with general Error or the following specific errors if
extension upload was required:
* InvalidManifestVersionError if manifest file has invalid extension version.
* NewerVersionAlreadyUploadedError if currently uploaded version is greater than the version in
the extension manifest.
* SameVersionAlreadyUploadedError if currently uploaded version equals to the version in
the extension manifest.
* UploadInReviewError` if upload failed due to item currently in the review state.