{"id":23843743,"url":"https://github.com/ngduc/mystik","last_synced_at":"2026-01-20T09:34:51.408Z","repository":{"id":14476806,"uuid":"17189067","full_name":"ngduc/mystik","owner":"ngduc","description":"Mystik (MkTable) is a generic Javascript DAO (Data Access Objects) for database systems including NoSQL databases, Redis, NodeJS support and REST API web service handling.","archived":false,"fork":false,"pushed_at":"2015-02-07T07:20:47.000Z","size":416,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-29T22:59:19.935Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ngduc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-02-25T21:37:51.000Z","updated_at":"2017-12-15T15:53:55.000Z","dependencies_parsed_at":"2022-09-16T19:21:23.900Z","dependency_job_id":null,"html_url":"https://github.com/ngduc/mystik","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ngduc/mystik","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngduc%2Fmystik","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngduc%2Fmystik/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngduc%2Fmystik/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngduc%2Fmystik/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ngduc","download_url":"https://codeload.github.com/ngduc/mystik/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngduc%2Fmystik/sbom","scorecard":{"id":683052,"data":{"date":"2025-08-11","repo":{"name":"github.com/ngduc/mystik","commit":"26f8f0b61b1143822657d9d620d3b0034877bf67"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"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":"Code-Review","score":0,"reason":"Found 0/30 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":"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"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":-1,"reason":"no releases found","details":null,"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"}}]},"last_synced_at":"2025-08-21T23:49:05.919Z","repository_id":14476806,"created_at":"2025-08-21T23:49:05.919Z","updated_at":"2025-08-21T23:49:05.919Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28600703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T08:51:33.170Z","status":"ssl_error","status_checked_at":"2026-01-20T08:51:10.855Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2025-01-02T19:50:55.954Z","updated_at":"2026-01-20T09:34:51.392Z","avatar_url":"https://github.com/ngduc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Mystik\n======\n[![Build Status](https://travis-ci.org/ngduc/mystik.png?branch=master)](https://travis-ci.org/ngduc/mystik)\n\nMystik (MkTable) is a generic Javascript DAO (Data Access Objects) for database systems including NoSQL databases, Redis, NodeJS support and REST API web service handling.\n\nIt also allows using the same query syntax on both client and server side to get data. Data could come from database or APIs in JSON format.\n\n**NOTE:** All working features are covered in unit tests. Please help implement engines for other databases or fix defects. Thanks.\n\n## Install\n\n```sh\n    $ npm install mystik-dao --save\nOR\n    $ git clone https://github.com/ngduc/mystik.git\n    $ npm install\n```\n\n## Demo\n\nThe Demo can be run to demonstrate client side APIs for CRUD.\n\nStart your local MongoDB for the demo, then launch the demo server and test at: http://localhost:3000\n\n```sh\n    $ node mystik/app/server.js\n```\n\n## Usage\n\nThis is a very basic NodeJS example. Prepare DB connection:\n\n```\n    var engine = new require( 'lib/mkMongoEngine' )( db ),\n        MkTable = require( 'lib/mkTable' );\n\n    var Users = new MkTable(engine, 'users');   // you should have 'users' table/schema defined.\n```\n\nDo some queries and updating data on [users] table:\n\n```\n    Users.find( { zipcode: 94040 } ).then( function( res ) {\n        // res.result is an array of rows in JSON.\n    });\n\n    Users.update( { age: 21, zipcode: 92020 }, { uid: '_uid00' } ).then( function( res ) {\n        // update user which has uid = '_uid00'\n    });\n```\n\nSee more interface methods in [mkTable.js](app/lib/mkTable.js)\n\n### Client Side\n\nFrom client side, you can use MkRestEngine to make call to \"APIs\" (NodeJS) which in turn will query database and return JSON data.\n\nThe query syntax is the same as back end.\n\nSee [this example](app/index.html)\n\n## Engines\n\nEngine (Database Engine) is the persistence layer. It provides implementations for the interface methods of MkTable.\n\nEngine is supposed to be swapped out easily to use another Database or Data source.\n\nEngine methods should return result(s) or error(s) in the same wrapper format like examples below:\n\n```\n    Find() result(s):\n    {\n        \"timestamp\": \"1393728392387\",\n        \"result\": [\n            {\n                \"uid\": \"_uid0111\",\n                \"age\": null,\n                \"password\": \"wialrqxkrnovfgvi\",\n                \"username\": null,\n                \"zipcode\": null\n            }\n        ]\n    }\n\n    Error:\n    {\n        \"code\": 0123,\n        \"message\": \"Some error message\",\n        \"error\" {\n            // error object of the DB driver\n        }\n    }\n```\n\n## Running Tests\n\nMake sure you have Database installed and running. To run unit tests:\n\n```sh\n    $ jasmine-node ./test/\n\n    # to stop the jasmine-node process when it is finished, use this:\n    $ jasmine-node --forceexit ./test/\n```\n\n## Dependencies\n\n    - Q for promise.\n    - node-cassandra-cql - if Cassandra is used.\n    - redis/hiredis - if Redis is used.\n    - mongoose - if MongoDB is used.\n    - jasmine-node - for unit testing.\n\n## License\n\n(MIT License)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fngduc%2Fmystik","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fngduc%2Fmystik","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fngduc%2Fmystik/lists"}