Skip to content

Conversation

@Charlitokenn
Copy link

No description provided.

Charlitokenn and others added 18 commits January 21, 2026 11:54
Integrates authentication, expenses, and licensing features:
- Custom authentication system with hashed passwords
- Enhanced expense tracking with descriptions
- Hybrid online/offline licensing with keymint.dev (7-day grace period)
- Fork-safe implementation in custom/ directory
- User management with role-based access

Co-Authored-By: Warp <[email protected]>
Changed vite invocation from 'yarn vite' to 'npx vite' to support npm-based development workflow.

Co-Authored-By: Warp <[email protected]>
Required by custom/licensing/fingerprint/device-id.ts for hardware-based device identification.

Co-Authored-By: Warp <[email protected]>
Added:
- Startup license check in app lifecycle with error handling
- Comprehensive unit tests for grace period, encryption, and license states
- Manual testing guide with 12 test scenarios and debugging tips

All licensing TODOs are now complete.

Co-Authored-By: Warp <[email protected]>
Added licenseManager const export for convenient access to singleton instance.

Co-Authored-By: Warp <[email protected]>
Added:
- LicenseSettings.vue component with full license management UI
- License tab in Settings page navigation
- License status display, activation, and deactivation controls
- Grace period warnings and expiry notifications

License management is now accessible via Settings > License tab.

Co-Authored-By: Warp <[email protected]>
Relocated License management from Setup to Reports section for better accessibility.
Now accessible via: Sidebar > Reports > License

Co-Authored-By: Warp <[email protected]>
Created new Settings group in sidebar (with gear icon) containing:
- License management as first item

Accessible via: Sidebar > Settings > License

Co-Authored-By: Warp <[email protected]>
Exposed ipcRenderer.invoke to preload script to support licensing IPC calls:
- activate-license
- check-license
- get-license-state
- clear-license

Co-Authored-By: Warp <[email protected]>
Added dotenv.config() at app startup to load .env file containing:
- KEYMINT_API_URL
- KEYMINT_ACCESS_TOKEN
- KEYMINT_PRODUCT_ID
- ENABLE_LICENSING

This fixes the 'Product ID must be at least 22 characters' error.

Co-Authored-By: Warp <[email protected]>
Updated dotenv.config() to use correct path based on environment:
- Development: Uses process.cwd()/.env
- Production: Uses __dirname/../.env

Added debug logging to verify config is loaded.

Co-Authored-By: Warp <[email protected]>
Added dotenv.config() in build/scripts/dev.mjs to load environment variables before running Electron.

This ensures KEYMINT_* variables are available in the Electron main process.

Co-Authored-By: Warp <[email protected]>
Removed:
- Old License schema (License.json)
- Old License model (License.ts)
- License validation redirect in App.vue
- License exports from custom schemas and models

Fixed:
- Dark mode text colors in LicenseSettings component
- 'License Management' heading now visible in dark mode
- Last validation date text now visible in dark mode

Users will no longer be redirected to old License page after login.

Co-Authored-By: Warp <[email protected]>
The License tab now appears in the bottom tab navigation alongside:
- General
- Print
- Inventory
- Defaults
- POS Settings
- ERPNext Sync
- System
- License (NEW)

Users can now click the License tab to access license management.

Co-Authored-By: Warp <[email protected]>
Removed the dedicated Settings sidebar group since license management is now accessible via:
- Setup > Settings > License tab

Sidebar structure is now cleaner with license accessible through the existing Setup section.

Co-Authored-By: Warp <[email protected]>
Fixed:
- Encryption key now derived from fixed seed instead of random generation
- Key persists across app restarts, allowing license cache decryption
- Added debug logging to track cache load/save operations
- Clear cache on decryption failure to prevent corrupt data

This fixes the issue where offline license validation failed after app restart because the encryption key was regenerated per session.

Co-Authored-By: Warp <[email protected]>
…nces, modified expense form to use numbers series, and removed unnecessary fields
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant