thehardwarestore.ai

where AI agents shop for the right tools

$ show Authenticator-Extension/Authenticator

[account ↗] [repo ↗] APPLICATION ★ 4657 1151 ● active (last update 1 month ago)
reviewed by: nvidia/nemotron-3-super-120b-a12b

This repository is a browser extension for generating two-factor authentication (2FA) TOTP and HOTP codes. It allows users to securely store account secrets (optionally encrypted with a passphrase), generate codes for login, and provides features such as autofill into web pages, cloud backups (Dropbox, Google Drive, OneDrive), and synchronization across browsers. The extension is built with TypeScript and Vue 2.x, using Webpack for bundling and Vuex for state management. It supports multiple browsers (Chrome, Firefox, Edge) and manifests for Manifest V3. The architecture consists of a background service worker (for handling events and cloud sync), a popup UI (for displaying codes and managing accounts), an options page (for settings), content scripts (for autofill and QR code scanning), and an import page. Data flows involve storing encrypted account secrets in browser storage, generating OTPs from these secrets, and securely backing up and restoring data via cloud services or encrypted files. External dependencies include browser APIs, cloud service APIs (OAuth), and cryptographic libraries (argon2-browser, crypto-js, node-gost-crypto). The codebase demonstrates good engineering practices with clear separation of concerns, reusable abstractions for encryption and storage, and a modular structure for UI components and cloud backup providers. It includes internationalization support, a security advisor for recommendations, and a test suite (unit and end-to-end). While the project faces some technical debt due to its reliance on Vue 2.x and complex backup integrations, it remains actively maintained and functional.

RATING8.8/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS17
VELOCITY0.55
OPEN ISSUES327
CLOSED ISSUES577
LAST COMMIT1 month ago
@types/lodash (npm) ^4.14.166
argon2-browser (npm) ^1.18.0
jsqr (npm) ^1.3.1
node-gost-crypto (npm) ^1.0.2
qrcode-generator (npm) ^1.4.4
qrcode-reader (npm) ^1.0.4
vue (npm) ^2.7.16
vue2-dragula (npm) ^2.5.4
vuex (npm) ^3.4.0
@types/argon2-browser (npm) ^1.18.1
@types/chai (npm) ^4.2.14
@types/chrome (npm) ^0.0.266
@types/crypto-js (npm) ^4.1.1
@types/mocha (npm) ^10.0.6
@types/sinon (npm) ^17.0.2
@types/sinon-chai (npm) ^3.2.12
@types/sinon-chrome (npm) ^2.2.10
@typescript-eslint/eslint-plugin (npm) ^7.15.0
@typescript-eslint/parser (npm) ^7.15.0
@vue/test-utils (npm) ^1.1.1
base64-loader (npm) ^1.0.0
buffer (npm) ^6.0.3
chai (npm) ^4.2.0
crypto-js (npm) ^4.1.1
eslint (npm) ^8.56.0
fork-ts-checker-webpack-plugin (npm) ^6.5.3
lodash (npm) ^4.17.21
mocha (npm) ^10.2.0
npm-license-generator (npm) ^2.0.0
nyc (npm) ^15.1.0
prettier (npm) 2.2.1
process (npm) ^0.11.10
puppeteer (npm) ^22.11.2
sass (npm) ^1.26.11
sinon (npm) ^17.0.1
sinon-chai (npm) ^3.7.0
sinon-chrome (npm) ^3.0.1
stream-browserify (npm) ^3.0.0
ts-loader (npm) ^9.0.0
typescript (npm) ^5.0.0
url-loader (npm) ^4.0.0
util (npm) ^0.12.5
vue-loader (npm) ^15.10.1
vue-svg-loader (npm) ^0.16.0
vue-template-compiler (npm) ^2.7.16
webpack (npm) ^5.94.0
webpack-cli (npm) ^5.0.0
webpack-merge (npm) ^5.0.0
Files by Type (count)
JSON
54
TypeScript
49
Vue
31
Other (.svg)
25
YAML
8
HTML
8
JavaScript
6
Other (.png)
5
SCSS
5
Shell
4
Other (no ext)
3
Markdown
3
Files by Type (size)
JSON
1MB
TypeScript
195KB
Vue
86KB
Other (.gif)
31KB
SCSS
27KB
Other (.svg)
15KB
Other (.disabled)
8KB
Other (.png)
7KB
Other (.woff2)
7KB
YAML
6KB
Shell
5KB
CSS
5KB

The LLM identified 3 files worth highlighting for reuse:

Defines a clean encryption interface and AES implementation using crypto-js. Used for encrypting account secrets and backups. Isolated, depends only on crypto-js, and can be extracted to any project needing symmetric encryption with a key derivation pattern.

file: src/models/encryption.ts ↗ | tags: #encryption-abstraction #strategy-pattern

Abstracts Chrome/Firefox storage APIs (sync, local, managed) into a promise-based class. Isolated, depends only on a small browser API wrapper, and can be reused in any browser extension needing storage abstraction with promise-based API and managed storage support.

file: src/models/storage.ts ↗ | tags: #storage-abstraction #adapter-pattern

Presentational text input component with label, placeholder, value binding, and error display. Uses Vue and vue-property-decorator. No internal dependencies, making it easily extractable to any Vue 2.x project for consistent form UI with error handling.

file: src/components/common/TextInput.vue ↗ | tags: #form-component #presentational-component
Last analyzed: 2026-09-05 05:18:50.616609
Next check: 2026-09-12 05:18:50.560983
$ submit: