Yury Semikhatsky commited on
Commit
a6baddb
·
unverified ·
1 Parent(s): 112cbb8

feat(extension): inject public key into release zip to preserve Web Store extension ID (#1462)

Browse files

The public key is hardcoded in vite.config.mts. When
SET_EXTENSION_PUBLIC_KEY_IN_MANIFEST is set, the vite build transforms
the copied manifest.json to include the key field, ensuring the packed
extension shares the same Chrome extension ID as the Web Store listing.

Fixes #1452

.github/workflows/publish.yml CHANGED
@@ -135,6 +135,8 @@ jobs:
135
  - name: Build extension
136
  working-directory: ./packages/extension
137
  run: npm run build
 
 
138
  - name: Get extension version
139
  id: get-version
140
  working-directory: ./packages/extension
 
135
  - name: Build extension
136
  working-directory: ./packages/extension
137
  run: npm run build
138
+ env:
139
+ SET_EXTENSION_PUBLIC_KEY_IN_MANIFEST: 1
140
  - name: Get extension version
141
  id: get-version
142
  working-directory: ./packages/extension
packages/extension/vite.config.mts CHANGED
@@ -19,6 +19,10 @@ import { defineConfig } from 'vite';
19
  import react from '@vitejs/plugin-react';
20
  import { viteStaticCopy } from 'vite-plugin-static-copy';
21
 
 
 
 
 
22
  // https://vitejs.dev/config/
23
  export default defineConfig({
24
  plugins: [
@@ -31,7 +35,14 @@ export default defineConfig({
31
  },
32
  {
33
  src: '../../manifest.json',
34
- dest: '.'
 
 
 
 
 
 
 
35
  }
36
  ]
37
  })
 
19
  import react from '@vitejs/plugin-react';
20
  import { viteStaticCopy } from 'vite-plugin-static-copy';
21
 
22
+ // Public key matching the Chrome Web Store listing — used to fix the extension ID across installs.
23
+ // Set SET_EXTENSION_PUBLIC_KEY_IN_MANIFEST=1 in release builds to inject it into the manifest.
24
+ const extensionPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRsUUO4mmbCi4JpmrIoIw31iVW9+xUJRZ6nSzya17PQkaUPDxe1IpgM+vpd/xB6mJWlJSyE1Lj95c0sbomGfVY1M0zUeKbaRVcAb+/a6m59gNR+ubFlmTX0nK9/8fE2FpRB9D+4N5jyeIPQuASW/0oswI2/ijK7hH5NTRX8gWc/ROMSgUj7rKhTAgBrICt/NsStgDPsxRTPPJnhJ/ViJtM1P5KsSYswE987DPoFnpmkFpq8g1ae0eYbQfXy55ieaacC4QWyJPj3daU2kMfBQw7MXnnk0H/WDxouMOIHnd8MlQxpEMqAihj7KpuONH+MUhuj9HEQo4df6bSaIuQ0b4QIDAQAB';
25
+
26
  // https://vitejs.dev/config/
27
  export default defineConfig({
28
  plugins: [
 
35
  },
36
  {
37
  src: '../../manifest.json',
38
+ dest: '.',
39
+ ...(!!process.env.SET_EXTENSION_PUBLIC_KEY_IN_MANIFEST ? {
40
+ transform: (content: string) => {
41
+ const manifest = JSON.parse(content);
42
+ manifest.key = extensionPublicKey;
43
+ return JSON.stringify(manifest, null, 2);
44
+ }
45
+ } : {})
46
  }
47
  ]
48
  })