This guide walks you through the critical deployment tasks to launch EchoKit v1.6.0.
All code changes from emergent.sh have been committed:
--report flag, /__coverage endpoint)e41b865Purpose: License validation service for Pro/LTD customers
Steps:
cd /Users/rkamalapuram/git-personal/echokit/worker
./deploy.sh
The script will:
Expected Output:
Published echokit-license (X.XX sec)
https://echokit-license.<YOUR_SUBDOMAIN>.workers.dev
Save:
Verification:
curl https://echokit-license.<YOUR_SUBDOMAIN>.workers.dev/__health
# Should return: {"ok":true,"name":"EchoKit License API"}
See: ../../../worker/DEPLOY.md for detailed instructions
Purpose: Make CLI available via npx echokit-server for CI/testing
Prerequisites: npm account with verified email
Steps:
# 1. Login to npm
npm login
# Enter: username, password, email, OTP (if 2FA enabled)
# 2. Verify login
npm whoami
# 3. Publish
cd /Users/rkamalapuram/git-personal/echokit/cli
npm publish --access=public
Expected Output:
+ echokit-server@1.0.0
Verification:
npx echokit-server --help
# Should show CLI help text
Post-Publish:
npx echokit-servernpx echokit-server <export.json>See: ../../../cli/PUBLISH.md for detailed instructions
Purpose: Make extension available for public download
Prerequisites:
../../../store/screenshot-guide.md)Package: store/echokit-api-recorder-mocker-v1.6.0.zip (ready to upload)
Steps:
store/echokit-api-recorder-mocker-v1.6.0.zip../../../store/chrome-web-store.md:
EchoKit β API Recorder & MockerDeveloper Toolsextension/icons/icon128.pngstore/promo-*.pngstore/screenshots/*.png../../../store/privacy-policy.md on GitHub Pages)See: ../../../store/chrome-web-store.md for listing copy
File: extension/shared/app.js
Location: showSettingsDialog() function
Add input field after License Key row:
// After license key input, add:
const endpoint = await BG({ type: 'echokit:settings:get', key: 'licenseEndpoint' }) || '';
html += `
<div class="settings-row">
<label for="license-endpoint">License Endpoint</label>
<div style="display: flex; gap: 8px;">
<input type="text" id="license-endpoint" value="${endpoint}"
placeholder="https://echokit-license.your-subdomain.workers.dev"
style="flex: 1;">
<button id="test-endpoint" class="secondary">Test</button>
</div>
<div class="help-text">Custom license validation endpoint. Leave blank to use default.</div>
</div>
`;
// In event handlers:
dialog.querySelector('#license-endpoint').addEventListener('change', async (e) => {
await BG({ type: 'echokit:license:setEndpoint', endpoint: e.target.value.trim() });
});
dialog.querySelector('#test-endpoint').addEventListener('click', async () => {
const ep = dialog.querySelector('#license-endpoint').value.trim();
if (!ep) return alert('Enter an endpoint URL first');
try {
const res = await fetch(ep + '/__health');
const data = await res.json();
if (data.ok) alert('β Endpoint is healthy: ' + data.name);
else alert('β Unexpected response: ' + JSON.stringify(data));
} catch (e) {
alert('β Connection failed: ' + e.message);
}
});
Background handler (extension/background.js):
case 'echokit:license:setEndpoint':
await chrome.storage.sync.set({ echokit_license_endpoint: msg.endpoint });
return { ok: true };
Update validation function to use custom endpoint if set.
After completing P0 tasks:
../../../TODO.md to mark P0 tasks completeTest CLI locally:
node cli/test/test.js # All tests should pass
Test Worker locally:
node worker/test.js # All tests should pass
Mint a test license key (after worker deployment):
curl -X POST https://echokit-license.<YOUR_SUBDOMAIN>.workers.dev/v1/issue \
-H "Authorization: Bearer <ADMIN_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"plan":"LTD","expiresAt":0}'
Test license validation:
curl -X POST https://echokit-license.<YOUR_SUBDOMAIN>.workers.dev/v1/validate \
-H "Content-Type: application/json" \
-d '{"key":"<KEY_FROM_PREVIOUS_STEP>"}'
../../../worker/DEPLOY.md../../../cli/PUBLISH.md../../../store/chrome-web-store.md../../../TODO.mdCurrent Status: Ready for P0 deployment. All code complete β
Next Action: Run ../../../worker/deploy.sh to deploy the license worker