Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.7.1] — 2026-10-04

### Added
- **Spanish store listing and extension name** — the extension name, summary, and shortcut description are now localised through `_locales` (English default, Spanish), so Chrome shows them in Spanish for Spanish-language browsers and the Chrome Web Store accepts a Spanish listing. The in-app interface remains in English.
- The package smoke check verifies every `__MSG_*__` placeholder resolves in every locale and that each locale's name and summary fit the store's 75- and 132-character limits.

## [0.7.0] — 2026-10-04

The trust release: every defect from the 2026-08-31 audit (#40–#106) is fixed,
Expand Down Expand Up @@ -119,6 +125,7 @@ in and out of Salesforce right from your browser, with nothing leaving your devi

- Initial release.

[0.7.1]: https://github.com/Exotic209093/WaveLink/releases/tag/v0.7.1
[0.7.0]: https://github.com/Exotic209093/WaveLink/releases/tag/v0.7.0
[0.6.0]: https://github.com/Exotic209093/WaveLink/releases/tag/v0.6.0
[0.2.0]: https://github.com/Exotic209093/WaveLink/releases/tag/v0.2.0
Expand Down
24 changes: 16 additions & 8 deletions docs/CHROME_WEB_STORE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Chrome Web Store release kit

This file is the source of truth for the WaveLink 0.7.0 listing and privacy declarations. Copy text exactly unless the Chrome Web Store dashboard requires a shorter value.
This file is the source of truth for the WaveLink 0.7.1 listing and privacy declarations. Copy text exactly unless the Chrome Web Store dashboard requires a shorter value.

## Dashboard and public links

Expand All @@ -18,21 +18,21 @@ npm run assets:store
npm run package
```

Upload `wavelink-0.7.0.zip`. The package contains the compiled Manifest V3 extension, icons, and bundled privacy page; it excludes source, tests, and build-only files.
Upload `wavelink-0.7.1.zip`. The package contains the compiled Manifest V3 extension, icons, and bundled privacy page; it excludes source, tests, and build-only files.

## Store listing

### Product name

> WaveLink — Salesforce SOQL Export & Data Import Tool

The product name comes from `public/manifest.json` and is 52 characters (limit 75).
The product name comes from `public/_locales/en/messages.json` (`extName`) and is 52 characters (limit 75).

### Summary

> Export Salesforce data with SOQL to CSV, Excel, JSON or XML right in Chrome. No Java, no install, no server. Free and open source.

The summary comes from `public/manifest.json` and is 130 characters, below Chrome's 132-character limit.
The summary comes from `public/_locales/en/messages.json` (`extDescription`) and is 130 characters, below Chrome's 132-character limit.

### Detailed description

Expand Down Expand Up @@ -67,10 +67,18 @@ The summary comes from `public/manifest.json` and is 130 characters, below Chrom
>
> Uses your existing Salesforce browser session. WaveLink is independent and is not affiliated with or endorsed by Salesforce, Inc.

### Localised listing
### Localised listing (Español)

Add **Español** in the dashboard with the Spanish summary and description in
The package ships `_locales/en` (default) and `_locales/es`. The Spanish name
and summary come from `public/_locales/es/messages.json` automatically:

- Name: **WaveLink — Exporta e importa datos de Salesforce con SOQL** (57 characters)
- Summary: **Exporta datos de Salesforce con SOQL a CSV, Excel, JSON o XML desde Chrome. Sin Java ni instalaciones. Gratis y de código abierto.** (130 characters)

In the dashboard, switch the Store listing language to **Spanish** and paste the
Spanish description from
[`launch-kit.md`](launch-kit.md#spanish-listing-store-listing--add-language--español).
Screenshots may reuse the English set.

### Category and language

Expand Down Expand Up @@ -184,9 +192,9 @@ The repository must be pushed before saving this URL so reviewers can reach the

## Final submission checklist

- [ ] Push the v0.7.0 code and public privacy policy to `main`.
- [ ] Push the v0.7.1 code and public privacy policy to `main`.
- [ ] Confirm the privacy-policy URL loads while signed out of GitHub.
- [ ] Upload `wavelink-0.7.0.zip` and confirm version 0.7.0 is detected.
- [ ] Upload `wavelink-0.7.1.zip` and confirm version 0.7.1 is detected.
- [ ] Replace the description with the text in this file.
- [ ] Upload all five screenshots in the documented order.
- [ ] Upload the icon and promotional tiles.
Expand Down
2 changes: 1 addition & 1 deletion docs/launch-kit.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ unlisted YouTube upload and paste the URL into the listing's video field.
>
> WaveLink es independiente y no está afiliado ni respaldado por Salesforce, Inc.

Have a native speaker skim this before publishing; it is written in neutral Latin American Spanish.
The Spanish name and summary ship in `public/_locales/es/messages.json` (v0.7.1+); paste only the description in the dashboard. Have a native speaker skim it before publishing; it is written in neutral Latin American Spanish.

## Tracked links

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wavelink",
"version": "0.7.0",
"version": "0.7.1",
"description": "A local-first Chrome extension for safer Salesforce data exports, imports, comparisons, schedules, and reusable jobs.",
"private": true,
"scripts": {
Expand Down
14 changes: 14 additions & 0 deletions public/_locales/en/messages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"extName": {
"message": "WaveLink — Salesforce SOQL Export & Data Import Tool",
"description": "Extension name shown in Chrome and on the Chrome Web Store (max 75 characters)."
},
"extDescription": {
"message": "Export Salesforce data with SOQL to CSV, Excel, JSON or XML right in Chrome. No Java, no install, no server. Free and open source.",
"description": "Store summary and extension description (max 132 characters)."
},
"commandTogglePanel": {
"message": "Toggle WaveLink panel",
"description": "Keyboard shortcut description on chrome://extensions/shortcuts."
}
}
11 changes: 11 additions & 0 deletions public/_locales/es/messages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"extName": {
"message": "WaveLink — Exporta e importa datos de Salesforce con SOQL"
},
"extDescription": {
"message": "Exporta datos de Salesforce con SOQL a CSV, Excel, JSON o XML desde Chrome. Sin Java ni instalaciones. Gratis y de código abierto."
},
"commandTogglePanel": {
"message": "Mostrar u ocultar el panel de WaveLink"
}
}
9 changes: 5 additions & 4 deletions public/manifest.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"manifest_version": 3,
"name": "WaveLink — Salesforce SOQL Export & Data Import Tool",
"version": "0.7.0",
"description": "Export Salesforce data with SOQL to CSV, Excel, JSON or XML right in Chrome. No Java, no install, no server. Free and open source.",
"name": "__MSG_extName__",
"default_locale": "en",
"version": "0.7.1",
"description": "__MSG_extDescription__",
"homepage_url": "https://github.com/Exotic209093/WaveLink",
"permissions": [
"storage",
Expand Down Expand Up @@ -50,7 +51,7 @@
"default": "Ctrl+Shift+L",
"mac": "Command+Shift+L"
},
"description": "Toggle WaveLink panel"
"description": "__MSG_commandTogglePanel__"
}
},
"icons": {
Expand Down
18 changes: 18 additions & 0 deletions scripts/validate-package.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,24 @@ for (const script of manifest.content_scripts || []) {
for (const source of script.js || []) requireFile(source);
}

// Every __MSG_*__ placeholder must resolve in every shipped locale, within the store's length limits.
const placeholders = [...JSON.stringify(manifest).matchAll(/__MSG_(\w+)__/g)].map(match => match[1]);
if (placeholders.length > 0) {
if (!manifest.default_locale) fail('manifest uses __MSG_ placeholders without default_locale');
requireFile(`_locales/${manifest.default_locale}/messages.json`);
const localesDir = path.join(dist, '_locales');
for (const locale of fs.readdirSync(localesDir)) {
const messages = JSON.parse(fs.readFileSync(path.join(localesDir, locale, 'messages.json'), 'utf8'));
for (const key of placeholders) {
if (!messages[key]?.message) fail(`_locales/${locale} is missing "${key}"`);
}
const name = messages.extName?.message ?? '';
const description = messages.extDescription?.message ?? '';
if (name.length > 75) fail(`_locales/${locale} extName is ${name.length} characters (max 75)`);
if (description.length > 132) fail(`_locales/${locale} extDescription is ${description.length} characters (max 132)`);
}
}

for (const required of ['app/app.html', 'app/index.js', 'offscreen/offscreen.html', 'offscreen/index.js']) {
requireFile(required);
}
Expand Down
Loading