{"_id":"@cappee/amex-actual-importer","_rev":"3-026df948a5668dabafe0cbefa7aa3e20","name":"@cappee/amex-actual-importer","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@cappee/amex-actual-importer","version":"1.0.0","license":"ISC","_id":"@cappee/amex-actual-importer@1.0.0","maintainers":[{"name":"cappee","email":"gabrielecappellaro@proton.me"}],"bin":{"amex-actual-importer":"dist/index.js"},"dist":{"shasum":"1369604579683a4ee4dde4118a1f93b9d0322006","tarball":"https://registry.npmjs.org/@cappee/amex-actual-importer/-/amex-actual-importer-1.0.0.tgz","fileCount":21,"integrity":"sha512-Rs1wil3GIyIP66fGGO9irPCtpnArde8gvMXb8bPzFONk3MU+zPD4AVaut8uxrNBhlQDvFpnuc6hWvDkzeatHEg==","signatures":[{"sig":"MEUCIQDRlRNbN+hjby+yiD9hogFRMJFyrLUL6zTwnZP/bODlcAIgLpPzGojwmOknEkyg4AYRLX2ZZ+6XZhjhvXcULE8izNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69083},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"ec455bc3c926566aad02d36a0e9ba2dbd579ed51","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"cappee","email":"gabrielecappellaro@proton.me"},"_npmVersion":"11.10.0","description":"Standalone service: syncs Amex Italia transactions to Actual Budget via @actual-app/api","directories":{},"_nodeVersion":"24.13.0","dependencies":{"imap":"^0.8.17","dotenv":"^17.2.4","patchright":"^1.52.0","@actual-app/api":"^26.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.9.3","@types/imap":"^0.8.40","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/amex-actual-importer_1.0.0_1771454112757_0.31789979591221074","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@cappee/amex-actual-importer","version":"1.0.1","license":"ISC","_id":"@cappee/amex-actual-importer@1.0.1","maintainers":[{"name":"cappee","email":"gabrielecappellaro@proton.me"}],"bin":{"amex-actual-importer":"dist/index.js"},"dist":{"shasum":"81eb0796361c910eee0173c45e8fcfa76a777428","tarball":"https://registry.npmjs.org/@cappee/amex-actual-importer/-/amex-actual-importer-1.0.1.tgz","fileCount":39,"integrity":"sha512-AmiDJPyFfFWASWBW3nV6lYCVOaW9mKaORcFH9KVxsf7qeeuUMPOHEJxW+nagq/2OLliu+fUbDQoM/MmaYIdh1g==","signatures":[{"sig":"MEUCIQDCSgxjLZHAShc9oZYMvGK580MiXr+Dvr8NfiwyYfjMlwIgevNFiM+mVz3Dqx+1UR7nJOLH8dfw9VxLULPjBPQRSfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100561},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"7eef17665d9c7e9b7ae178c479e10a77e1c538a5","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"cappee","email":"gabrielecappellaro@proton.me"},"_npmVersion":"11.10.0","description":"Standalone service: syncs Amex Italia transactions to Actual Budget via @actual-app/api","directories":{},"_nodeVersion":"24.13.0","dependencies":{"imap":"^0.8.17","dotenv":"^17.2.4","patchright":"^1.52.0","@actual-app/api":"^26.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.9.3","@types/imap":"^0.8.40","@types/node":"^25.2.3"},"_npmOperationalInternal":{"tmp":"tmp/amex-actual-importer_1.0.1_1771455077463_0.7235786599825871","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@cappee/amex-actual-importer","version":"2.0.0","description":"Standalone service: syncs Amex Italia transactions to Actual Budget via @actual-app/api","license":"ISC","author":{"name":"Gabriele Cappellaro"},"type":"module","engines":{"node":">=20.0.0"},"main":"dist/src/index.js","bin":{"amex-actual-importer":"dist/src/index.js"},"repository":{"type":"git","url":"git+https://github.com/cappee/amex-actual-importer.git"},"bugs":{"url":"https://github.com/cappee/amex-actual-importer/issues"},"homepage":"https://github.com/cappee/amex-actual-importer#readme","keywords":["amex","actual-budget","actual","sync","importer","italia"],"publishConfig":{"access":"public"},"scripts":{"build":"tsc --noCheck","start":"node dist/src/index.js","dev":"tsx src/index.ts","test":"tsx --test test/**/*.test.ts","encrypt":"tsx scripts/encrypt-credential.ts","lint":"tsc --noEmit","prepublishOnly":"npm run build"},"dependencies":{"@actual-app/api":"^26.2.0","dotenv":"^17.2.4","imapflow":"^1.0.0","winston":"^3.19.0"},"devDependencies":{"typescript":"^5.9.3","tsx":"^4.19.0","@types/node":"^25.2.3","@types/imapflow":"^1.0.0"},"gitHead":"9ed1ddea3f5c67d7ca06e34b6abc0371744c64a3","_id":"@cappee/amex-actual-importer@2.0.0","_nodeVersion":"24.13.0","_npmVersion":"11.10.0","dist":{"integrity":"sha512-BKELS3uC7SpKLsfKD+GZgmx2W+YGoBGflxPImMef/f+gZd08aoRUEtyZd5nU1CD/An7t2W6THWRLFoyb01DZ4Q==","shasum":"c08ce2c0a6cdecb05fdaf1801d3262721ae13035","tarball":"https://registry.npmjs.org/@cappee/amex-actual-importer/-/amex-actual-importer-2.0.0.tgz","fileCount":24,"unpackedSize":55277,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD1ldZDdWzkbwVEaSEzO7cATCVIwFu8t62AgHYCj+U4JAIgA0WxnllMvGeDJ3syXFFHT5YIUjBPCShf17h8YCuhtkc="}]},"_npmUser":{"name":"cappee","email":"gabrielecappellaro@proton.me"},"directories":{},"maintainers":[{"name":"cappee","email":"gabrielecappellaro@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/amex-actual-importer_2.0.0_1776714765767_0.8639040249384968"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-18T22:35:12.643Z","modified":"2026-04-20T19:52:46.041Z","1.0.0":"2026-02-18T22:35:12.914Z","1.0.1":"2026-02-18T22:51:17.625Z","2.0.0":"2026-04-20T19:52:45.919Z"},"license":"ISC","description":"Standalone service: syncs Amex Italia transactions to Actual Budget via @actual-app/api","maintainers":[{"name":"cappee","email":"gabrielecappellaro@proton.me"}],"readme":"# amex-actual-importer v2\n\n> **Status: under development** — v2 is a full rewrite, not production-ready yet.\n\nSyncs American Express Italia transactions to [Actual Budget](https://actualbudget.org/) via `@actual-app/api`. Authenticates with MFA (OTP via email), runs as a daily systemd timer on a VPS.\n\n**Note:** v2 uses reverse-engineered AMEX web APIs.\n\n## Requirements\n\n- Node.js ≥ 20\n- IMAP access to the email account that receives AMEX OTPs\n- A reachable Actual Budget instance\n\n## Setup\n\n```bash\nnpm install\ncp .env.example .env\n# fill in .env, then encrypt sensitive values:\nnpm run encrypt\n```\n\nThe encryption key must live outside `.env`:\n\n```bash\nexport AMEX_ACTUAL_IMPORTER_ENCRYPTION_KEY=\"your-secret-key\"\n```\n\n## Usage\n\n```bash\nnpm run dev      # run directly with tsx (development)\nnpm run build    # compile TypeScript → dist/\nnpm start        # run compiled output (production)\nnpm test         # unit tests\nnpm run lint     # type check only\n```\n\n## Deploy\n\nInstall as a systemd service + daily timer (`scripts/install-systemd.sh`).\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Runtime error (auth, network, IMAP, Actual) |\n| `2` | Configuration error |\n","readmeFilename":"README.md","homepage":"https://github.com/cappee/amex-actual-importer#readme","keywords":["amex","actual-budget","actual","sync","importer","italia"],"repository":{"type":"git","url":"git+https://github.com/cappee/amex-actual-importer.git"},"author":{"name":"Gabriele Cappellaro"},"bugs":{"url":"https://github.com/cappee/amex-actual-importer/issues"}}