{"id":24987039,"url":"https://github.com/senecajs/seneca-user","last_synced_at":"2025-06-30T10:34:31.079Z","repository":{"id":4692673,"uuid":"5839636","full_name":"senecajs/seneca-user","owner":"senecajs","description":"User account business logic (Seneca microservice component)","archived":false,"fork":false,"pushed_at":"2024-06-10T19:30:56.000Z","size":1603,"stargazers_count":21,"open_issues_count":11,"forks_count":30,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-06-21T04:16:23.951Z","etag":null,"topics":["business-logic","component","microservices","seneca","user"],"latest_commit_sha":null,"homepage":"https://senecajs.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/senecajs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-09-17T10:47:08.000Z","updated_at":"2025-06-20T15:24:14.000Z","dependencies_parsed_at":"2024-08-23T08:16:40.351Z","dependency_job_id":null,"html_url":"https://github.com/senecajs/seneca-user","commit_stats":{"total_commits":259,"total_committers":22,"mean_commits":"11.772727272727273","dds":"0.44787644787644787","last_synced_commit":"3503065450c7cf804308d3cce382e96d6f0d3f83"},"previous_names":[],"tags_count":44,"template":true,"template_full_name":null,"purl":"pkg:github/senecajs/seneca-user","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/senecajs%2Fseneca-user","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/senecajs%2Fseneca-user/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/senecajs%2Fseneca-user/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/senecajs%2Fseneca-user/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/senecajs","download_url":"https://codeload.github.com/senecajs/seneca-user/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/senecajs%2Fseneca-user/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261110282,"owners_count":23111013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["business-logic","component","microservices","seneca","user"],"created_at":"2025-02-04T11:35:59.466Z","updated_at":"2025-06-30T10:34:31.001Z","avatar_url":"https://github.com/senecajs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Seneca](http://senecajs.org/files/assets/seneca-logo.png)\n\n\u003e A [Seneca.js][] user management plugin.\n\n# @seneca/user\n[![npm version][npm-badge]][npm-url]\n[![build](https://github.com/senecajs/seneca-user/actions/workflows/build.yml/badge.svg)](https://github.com/senecajs/seneca-user/actions/workflows/build.yml)\n[![Coverage Status][coveralls-badge]][coveralls-url]\n[![Maintainability][codeclimate-badge]][codeclimate-url]\n\n\n| ![Voxgig](https://www.voxgig.com/res/img/vgt01r.png) | This open source module is sponsored and supported by [Voxgig](https://www.voxgig.com). |\n|---|---|\n\n\n## Description\n\nThis module is a plugin for\nthe [Seneca framework](http://senecajs.org). It provides a set of\ncommon user management actions (`register`, `login` etc.).\n\n\n## Install\n\n```sh\nnpm install seneca\nnpm install seneca-promisify // dependency\nnpm install seneca-entity // dependency\nnpm install @seneca/user\n```\n\n### Quick example\n\nRegister a user and then create an automatic login for testing.\n\n```js\nconst Seneca = require('seneca')\n\nvar seneca = Seneca()\n  .use('promisify')\n  .use('entity')\n  .use('user')\n\nvar out = await seneca.post('sys:user,register:user', {\n  handle: 'alice'\n})\n\nconsole.log('USER:', out.user)\n\nout = await seneca.post('sys:user,login:user', {\n  handle: 'alice',\n  auto: true\n})\n\nconsole.log('LOGIN:', out.login)\n\n```\n\n### Detailed Examples\n\nBecause Seneca treats messages as first-class citizens, 90% of unit\ntesting can be implemented with message scenarios that also provide\ndetailed usage examples:\n\n* [register_get](test/register_get.calls.js)\n* [password](test/password.calls.js)\n* [adjust](test/adjust.calls.js)\n* [verify](test/verify.calls.js)\n* [login](test/login.calls.js)\n* [logout](test/logout.calls.js)\n* [change](test/change.calls.js)\n* [final](test/final.calls.js)\n\n\n\u003c!--START:action-list--\u003e\n\n\n## Action Patterns\n\n* [adjust:user,sys:user](#-adjustusersysuser-)\n* [auth:user,sys:user](#-authusersysuser-)\n* [change:pass,sys:user](#-changepasssysuser-)\n* [change:handle,sys:user](#-changehandlesysuser-)\n* [change:email,sys:user](#-changeemailsysuser-)\n* [change:password,sys:user](#-changepasswordsysuser-)\n* [check:verify,sys:user](#-checkverifysysuser-)\n* [check:exists,sys:user](#-checkexistssysuser-)\n* [cmd:encrypt,hook:password,sys:user](#-cmdencrypthookpasswordsysuser-)\n* [cmd:pass,hook:password,sys:user](#-cmdpasshookpasswordsysuser-)\n* [get:user,sys:user](#-getusersysuser-)\n* [list:user,sys:user](#-listusersysuser-)\n* [list:login,sys:user](#-listloginsysuser-)\n* [list:verify,sys:user](#-listverifysysuser-)\n* [login:user,sys:user](#-loginusersysuser-)\n* [logout:user,sys:user](#-logoutusersysuser-)\n* [make:verify,sys:user](#-makeverifysysuser-)\n* [register:user,sys:user](#-registerusersysuser-)\n* [remove:user,sys:user](#-removeusersysuser-)\n* [sys:user,update:user](#-sysuserupdateuser-)\n\n\n\u003c!--END:action-list--\u003e\n\n\u003c!--START:action-desc--\u003e\n\n\n## Action Descriptions\n\n### \u0026laquo; `adjust:user,sys:user` \u0026raquo;\n\nAdjust user status idempotently (activated, etc.).\n\n\n#### Parameters\n\n\n* _active_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user found',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `auth:user,sys:user` \u0026raquo;\n\nAuthenticate a login using token\n\n\n#### Parameters\n\n\n* _token_ : string \u003ci\u003e\u003csmall\u003e{presence:required}\u003c/small\u003e\u003c/i\u003e\n* _user_fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if login is active',\n  user: 'user entity',\n  login: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `change:pass,sys:user` \u0026raquo;\n\nChange user password.\n\n\n#### Parameters\n\n\n* _pass_ : string\n* _repeat_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _verify_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if changed',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `change:handle,sys:user` \u0026raquo;\n\nChange user handle.\n\n\n#### Parameters\n\n\n* _new_handle_ : string\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if changed',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `change:email,sys:user` \u0026raquo;\n\nChange user email.\n\n\n#### Parameters\n\n\n* _new_email_ : string\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if changed',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `change:password,sys:user` \u0026raquo;\n\nChange user password.\n\n\n#### Parameters\n\n\n* _pass_ : string\n* _repeat_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _verify_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if changed',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `check:verify,sys:user` \u0026raquo;\n\nCheck a verfication entry.\n\n\n#### Parameters\n\n\n* _kind_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _code_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _now_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _expiry_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if valid',\n  why: 'string coded reason if not valid'\n}\n```\n\n\n----------\n### \u0026laquo; `check:exists,sys:user` \u0026raquo;\n\nCheck user exists.\n\n\n#### Parameters\n\n\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user exists',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `cmd:encrypt,hook:password,sys:user` \u0026raquo;\n\nEncrypt a plain text password string.\n\n\n\n\n#### Examples\n\n\n\n* `cmd:encrypt,hook:password,sys:user,pass:foofoobarbar`\n  * Result: {ok:true, pass:_encrypted-string_, salt:_string_}\n#### Parameters\n\n\n* _salt_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _pass_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _password_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _rounds_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if encryption succeeded',\n  pass: 'encrypted password string',\n  salt: 'salt value string'\n}\n```\n\n\n----------\n### \u0026laquo; `cmd:pass,hook:password,sys:user` \u0026raquo;\n\nValidate a plain text password string.\n\n\n\n\n#### Examples\n\n\n\n* `cmd:pass,hook:password,sys:user,pass:goodpassword`\n  * Result: {ok:true}\n#### Parameters\n\n\n* _salt_ : string\n* _pass_ : string\n* _proposed_ : string\n* _rounds_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if password is valid',\n  why: 'string coded reason if not valid'\n}\n```\n\n\n----------\n### \u0026laquo; `get:user,sys:user` \u0026raquo;\n\nGet user details\n\n\n#### Parameters\n\n\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user found',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `list:user,sys:user` \u0026raquo;\n\nList users\n\n\n#### Parameters\n\n\n* _active_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user found',\n  items: 'user entity item list'\n}\n```\n\n\n----------\n### \u0026laquo; `list:login,sys:user` \u0026raquo;\n\nList logins for a user\n\n\n#### Parameters\n\n\n* _active_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _login_q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user found',\n  items: 'user entity item list'\n}\n```\n\n\n----------\n### \u0026laquo; `list:verify,sys:user` \u0026raquo;\n\nCreate a verification entry (multiple use cases).\n\n\n#### Parameters\n\n\n* _kind_ : string\n* _code_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _once_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _valid_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _custom_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _expire_point_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _expire_duration_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user found',\n  verify: 'verify entity'\n}\n```\n\n\n----------\n### \u0026laquo; `login:user,sys:user` \u0026raquo;\n\nLogin user\n\n\n#### Parameters\n\n\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _auto_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _pass_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user logged in',\n  user: 'user entity',\n  login: 'login entity'\n}\n```\n\n\n----------\n### \u0026laquo; `logout:user,sys:user` \u0026raquo;\n\nLogin user\n\n\n#### Parameters\n\n\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _token_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _login_in_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _login_q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional,default:{}}\u003c/small\u003e\u003c/i\u003e\n* _load_logins_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user logged in',\n  count: 'number of logouts'\n}\n```\n\n\n----------\n### \u0026laquo; `make:verify,sys:user` \u0026raquo;\n\nCreate a verification entry (multiple use cases).\n\n\n#### Parameters\n\n\n* _kind_ : string\n* _code_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _once_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _valid_ : boolean \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _custom_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _expire_point_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _expire_duration_ : number \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user found',\n  verify: 'verify entity'\n}\n```\n\n\n----------\n### \u0026laquo; `register:user,sys:user` \u0026raquo;\n\nRegister a new user\n\n\n#### Parameters\n\n\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_ : object \u003ci\u003e\u003csmall\u003e{unknown:true}\u003c/small\u003e\u003c/i\u003e\n* _user_data_ : object \u003ci\u003e\u003csmall\u003e{unknown:true}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user registration succeeded',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `remove:user,sys:user` \u0026raquo;\n\nRemove a user\n\n\n#### Parameters\n\n\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user removed',\n  user: 'user entity'\n}\n```\n\n\n----------\n### \u0026laquo; `sys:user,update:user` \u0026raquo;\n\nUpdate a user\n\n\n#### Parameters\n\n\n* _user_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _user_id_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _email_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _handle_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _nick_ : string \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _q_ : object \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n* _fields_ : array \u003ci\u003e\u003csmall\u003e{presence:optional}\u003c/small\u003e\u003c/i\u003e\n\n\n\n\n#### Replies With\n\n\n```\n{\n  ok: '_true_ if user updated',\n  user: 'user entity'\n}\n```\n\n\n----------\n\n\n\u003c!--END:action-desc--\u003e\n\n\n\n## License\n\nCopyright (c) 2010-2020, Richard Rodger and other contributors.\nLicensed under [MIT][].\n\n[MIT]: ./LICENSE\n[Seneca.js]: https://www.npmjs.com/package/seneca\n[coveralls-badge]: https://coveralls.io/repos/github/senecajs/seneca-user/badge.svg?branch=master\n[coveralls-url]: https://coveralls.io/github/senecajs/seneca-user?branch=master\n[codeclimate-badge]: https://api.codeclimate.com/v1/badges/404faaa89a95635ddfc0/maintainability\n[codeclimate-url]: https://codeclimate.com/github/senecajs/seneca-user/maintainability\n[npm-badge]: https://img.shields.io/npm/v/@seneca/user.svg\n[npm-url]: https://npmjs.com/package/@seneca/user\n[Senecajs org]: https://github.com/senecajs/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsenecajs%2Fseneca-user","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsenecajs%2Fseneca-user","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsenecajs%2Fseneca-user/lists"}