{"id":13605760,"url":"https://github.com/timgabets/electron-atm","last_synced_at":"2026-03-08T05:33:45.625Z","repository":{"id":57221541,"uuid":"96783105","full_name":"timgabets/electron-atm","owner":"timgabets","description":"A simple free open-source NDC ATM emulator, written on JavaScript, jQuery and Electron framework.","archived":false,"fork":false,"pushed_at":"2020-10-06T14:34:06.000Z","size":4759,"stargazers_count":108,"open_issues_count":13,"forks_count":62,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-10-25T02:03:37.793Z","etag":null,"topics":["atm","atm-simulator","ndc","simulator"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timgabets.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-07-10T13:52:03.000Z","updated_at":"2025-10-04T22:46:25.000Z","dependencies_parsed_at":"2022-08-29T01:50:50.769Z","dependency_job_id":null,"html_url":"https://github.com/timgabets/electron-atm","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/timgabets/electron-atm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgabets%2Felectron-atm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgabets%2Felectron-atm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgabets%2Felectron-atm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgabets%2Felectron-atm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timgabets","download_url":"https://codeload.github.com/timgabets/electron-atm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgabets%2Felectron-atm/sbom","scorecard":{"id":885954,"data":{"date":"2025-08-11","repo":{"name":"github.com/timgabets/electron-atm","commit":"c999f7923dd1f275b58bda710c0e9717ed2839e0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v2.1: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 1.4.3 not signed: https://api.github.com/repos/timgabets/electron-atm/releases/9834333","Warn: release artifact 1.4.2 not signed: https://api.github.com/repos/timgabets/electron-atm/releases/9388146","Warn: release artifact v1.4.1-alpha not signed: https://api.github.com/repos/timgabets/electron-atm/releases/8836183","Warn: release artifact 1.4.3 does not have provenance: https://api.github.com/repos/timgabets/electron-atm/releases/9834333","Warn: release artifact 1.4.2 does not have provenance: https://api.github.com/repos/timgabets/electron-atm/releases/9388146","Warn: release artifact v1.4.1-alpha does not have provenance: https://api.github.com/repos/timgabets/electron-atm/releases/8836183"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T10:03:32.798Z","repository_id":57221541,"created_at":"2025-08-24T10:03:32.798Z","updated_at":"2025-08-24T10:03:32.798Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30246740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atm","atm-simulator","ndc","simulator"],"created_at":"2024-08-01T19:01:02.442Z","updated_at":"2026-03-08T05:33:40.613Z","avatar_url":"https://github.com/timgabets.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# electron-atm\n\n![Travis CI build badge](https://travis-ci.org/timgabets/electron-atm.svg?branch=master)\n[![Maintainability](https://api.codeclimate.com/v1/badges/bd413733bed6663896cc/maintainability)](https://codeclimate.com/github/timgabets/electron-atm/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/bd413733bed6663896cc/test_coverage)](https://codeclimate.com/github/timgabets/electron-atm/test_coverage)\n\n_The project is not maintained anymore_. If anybody would like to pick up the project and become its maintainer, just drop me an [email](mailto:tim@gabets.ru) to discuss the ownership transfer.\n\nA simple free open-source [APTRA™ Advance NDC](https://www.ncr.com/financial-services/banking-atm-software/aptra-advance-ndc) ATM emulator, written from scratch using ES6 JavaScript, [visjs](http://visjs.org/), jQuery and [Electron](https://electron.atom.io/) framework.\n\nProfile selection on application start:\n![profile selection](img/profile-selection.png)\n\nATM tab:\n![screenshot](img/screenshot.png)\n\nStates tab:\n![states navigator](img/states.png)\n\nFinancial Institutions tab:\n![FITs page](img/fits.png)\n\nCards management tab:\n![cards page](img/cards.png)\n\n## To Use\n\nWindows and MacOS build installers may be downloaded from [Releases page](https://github.com/timgabets/electron-atm/releases).\n\nYou may also build the app from sources. To do this, you'll need [Git](https://git-scm.com) and [Node.js version 8.x](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From the command line:\n\n```bash\n# Clone this repository\ngit clone https://github.com/timgabets/electron-atm\n# Go into the repository\ncd electron-atm\n# Install dependencies\nnpm install\n# Check the test cases\nnpm test\n# Run the app\nnpm start\n```\n\n## Reasons of why this application was developed\n\nSome reasons for the appearance of this application are described [here](http://gabets.ru/electron-atm.html).\n\n## Features \n\nThis is a side project of my full-time job and only the features that I currently need in my everyday work are implemented. \n\nCurrently only the basic stuff is working, such as:\n\n * Connecting to ATM host\n * Showing ATM connection status icon (Offline, Connected, Out-Of-service, In-Service)\n * Moving through almost all the basic states (ICC states are passed through as well)\n * Showing basic image screens linked to the state\n * Checking the Card's financial institution based on FIT tables\n * Keyboard shortcuts: FDK (A-I), numeric(0-9), Esc, Enter and Backspace\n * Receiving and processing states, screens and FITs (financial insitution tables) from host\n * Showing traces in a log area\n * Saving ATM configuration data (such as states, screens, FITs, ConfigID, counters etc) and restoring it on application start\n * Showing dynamic on-screen data received from host\n * Crypto support: PIN block encryption, dynamic key exchange etc. (Triple DES double length key only)\n * State Navigator: showing graph of states\n * State Navigator: updating screen image when jumping through the states\n * State Navigator: displaying state details when state selected\n * FITs: showing a table of Financial Institutions\n * Saving the image path in user settings\n\nThings to be implemented (very) soon:\n * Touch area support (pressing touch areas, not only FDK buttons)\n * Auto reconnection\n * ICC support\n\n\n## FAQ\n\n### What is this about?\n\nThis is an implementation of ATM (Automatic Teller machine) simulator, working under [APTRA™ Advance NDC](https://www.ncr.com/financial-services/banking-atm-software/aptra-advance-ndc) protocol.\n\n### And why may I need it?\n\nIf you are working with ATM processing systems (a.k.a ATM Host - the systems to which ATMs are connected, and which process various messages from ATMs, including financial inquiries) - either developing applications or supporting them, you may need to emulate the ATM messages coming to the host. You're lucky if you have a real ATM nearby, but the chances are that your test ATM may be located on the other floor, or, the company that you're currently working in may not have a real ATM at all. Being fed up with closed-source self-written ATM-simulators, I decided to develop my own stable featureful open-source ATM simulator, which may be available to everyone in the Banking/Card processing community.\n\n### The application is ugly.\n\nYes, I know and I'm really sorry. I'm not a frontend developer (I'm not even a web-developer  as my daytime job is related to soft-realtime payment processing, and my native language is C). Obviously, I'm not good at CSS at all, so, if you are strong enough in UI/UX, please, feel free to do something with [this](https://github.com/timgabets/electron-atm/blob/master/css/styles.css). And [that](https://github.com/timgabets/electron-atm/blob/master/index.html). And [that](https://github.com/timgabets/electron-atm/tree/master/templates) as well.\n\n### jQuery? Why not [React](https://facebook.github.io/react/)?\n\nTo me, [React](https://facebook.github.io/react/) is good for building user-interface-specific applications, while this application is considered as backend-centric (i.e. having tons of the protocol-specific code in the backend). As always, it started as a simple Electron app with \"just a little jQuery\", but now it's a [whole mess](https://github.com/timgabets/electron-atm/blob/master/src/listeners/window.js) of event-handlers and SetInterval functions, that already need to be rewritten. So, if you're brave enough to redesign it all using React, please send me a pull request! ;)\n\n\n### I would like to use the application, but it seems that the feature X that I really need is not yet implemented.\n\nAs I said, only the features that I needed were implemented. For example, all the ATM configurations that I've been working with don't have V-type states (Language select from a card), therefore, these states are not supported by the application. So, if there is a feature that you would like to have implemented, you may create an [issue](https://github.com/timgabets/electron-atm/issues), or just drop me an [email](mailto:tim@gabets.ru). \n\n### Something went wrong with the ATM configuration, and I would like to start from scratch\n\nThe application uses [electron-settings](https://www.npmjs.com/package/electron-settings) package to store the ATM configuration (all the data is stored is a single json file). Please refer to the [package' FAQ](https://github.com/nathanbuchar/electron-settings/wiki/FAQs#where-is-the-settings-file-saved) to know where the settings file is stored.\n\n\n## Issues\n\nPlease feel free to submit [issues](https://github.com/timgabets/electron-atm/issues) and enhancement requests, or simply drop me an [email](mailto:tim@gabets.ru) if you want to participate in the project or just give some feedback.\n\n## Contribute\n\nContributions are welcome, I would appreciate any help in application testing and development ;)\n\n## Modules\n\nHere is the list of npm modules that originally were the part of the application, but later were moved to the separate packages:\n\n * [ndc-parser](https://github.com/timgabets/ndc-parser) - the parser of the messages sent from host to the ATM\n * [atm-cursor](https://github.com/timgabets/atm-cursor) - a library that handles current cursor position on the ATM screen\n * [atm-fits](https://github.com/timgabets/atm-fits) - a service for manipulating Financial Institutions Table records (FITs)\n * [atm-hardware](https://github.com/timgabets/atm-hardware)  - provides the emulation for the different ATM hardware (cassettes, readers, printers etc) + generates hardware fitness, statuses etc.\n * [atm-logging](https://github.com/timgabets/atm-logging) - a library for displaying trace records in the Log area\n * [atm-opcode-buffer](https://github.com/timgabets/atm-opcode-buffer) - Operation Code Buffer access library \n * [atm-screens](https://github.com/timgabets/atm-screens) - ATM Screens service (parsing, binding images etc.)\n * [atm-screentext](https://github.com/timgabets/atm-screentext) - library for updating on-screen text \n * [atm-state-levels](https://github.com/timgabets/atm-state-levels) - a helper service to work with ATM state logical levels used by the States Graph, rendered by visjs on a States page\n * [atm-states](https://github.com/timgabets/atm-states) - ATM states service - provides the message parsing, runtime states data storage etc.\n * [atm-timestamp](https://github.com/timgabets/atm-timestamp) - a simple helper service for retrieving current timestamp. Used by the Log service\n * [atm-trace](https://github.com/timgabets/atm-trace) - a library for parsing binary data coming from host / to host + displaying objects like states/screens/FITs etc\n * [ndc-parser](https://github.com/timgabets/ndc-parser) - a library for parsing messages coming from host in NDC format\n * [pinblock](https://github.com/timgabets/pinblock) - a library for creating PIN Blocks and converting them to the ATM format\n\n\n## License\n[LGPLv2](LICENSE.md)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimgabets%2Felectron-atm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimgabets%2Felectron-atm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimgabets%2Felectron-atm/lists"}