{"_id":"@cto.ai/ops-ctrl-account","_rev":"11-5352bd0d7feb02466e437bcb26f95e3a","name":"@cto.ai/ops-ctrl-account","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@cto.ai/ops-ctrl-account","version":"1.0.0","keywords":[],"author":{"name":"David Mark Clements","email":"dave@cto.ai"},"license":"MIT","_id":"@cto.ai/ops-ctrl-account@1.0.0","maintainers":[{"name":"davidmarkclements","email":"david.mark.clements@gmail.com"},{"name":"mattcan","email":"gh@matthewcantelon.ca"},{"name":"maumercado","email":"mau@maumercado.com"},{"name":"cto.ai-admin","email":"kc@cto.ai"},{"name":"slajax","email":"kc@kc.io"},{"name":"brettcampbell","email":"brett@cto.ai"},{"name":"ruxandrafed","email":"ruxandra.fediuc@gmail.com"},{"name":"slaterb1","email":"ben@hackcapital.com"},{"name":"jeff_johnson","email":"jeff@cto.ai"},{"name":"jbottein","email":"jeremy@cto.ai"}],"homepage":"https://github.com/cto-ai/ops-ctrl-account#readme","bugs":{"url":"https://github.com/cto-ai/ops-ctrl-account/issues"},"dist":{"shasum":"6167d13d8d57dadff6df23f9cce0ee101e16bbba","tarball":"https://registry.npmjs.org/@cto.ai/ops-ctrl-account/-/ops-ctrl-account-1.0.0.tgz","fileCount":8,"integrity":"sha512-4N/q64l8neU5TZZlgpARA0lqXJclTzHEW8y4UwVCek+eyYqFD71/A4KF1g6EQRv0RPBaNCo3rvoAC91f0tqS3g==","signatures":[{"sig":"MEQCIGf2+NIOhNx9QKh0HIyWTnRtsH0f5BUh+tAOVr08XiigAiBJ3qU+mKbL+mb2Ik5i1jI83ug1HCwLEY5aRWlGLmjWqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJap0CRA9TVsSAnZWagAAmpUP/iS2pQpaN+ces2s6PXtx\nUMve0Ckyp+yB8pQl/ru2nFO9deeW21vlHeY2eEyH+qx8Whvx9JIIeRLYz6co\nmbs3mww9amg6qrJ+IIk+1cXsljWkZ034vn64natZE7K6ErZW7JGkYEXJAJ/k\ng45EmJMG6FN4Rao2Irob3nrN2Ty2X8HFGRk6G8e4/DjRebcG1FaYQmHQDWAO\nbFluyQI3olnLhUUzyYA2iToOdLr1q6msDMDXcyh7XV7p4NFMaitjPxDGA4rQ\npxrzB1MW3WvbmMAkurkDJUtLdXOn6q/JDBEZIKoxcMxULzVjuf9VGb3jt6bh\nN17MfQO09E8zza/9H36UMVvS/UkGNFOuaqwYHF8TYeVmPjH1dzzFjEP6mam9\n/3YAU59mQR/ue6Mrt8s8TQBFc/lXniVqIzbmPptXUwLZKBh6uDWLdkRq5Oz8\nfapPbxasGffXnxsImCgejCix1SNESoB6TVobzFXRBvfMJR74ACkIl7xsTVWn\nzj8VQKH2IcnNfPwQkjcSvVIj/eUBJY23dmXpjYXf64Y3/2NfJiJ8Z/AV6q1o\nQKHS4UKkSCIIKJsBNMIeJ9nYijDiJ/ublOYfaYqT6yld7W8NxdrMOHBPxAi6\nprtZ2gUeNxz4xbFwyrWvPUWuLubvry82sRhzCIaWrcFx3K/93AgD/mbx8TpZ\nY3wx\r\n=jkua\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"f6b6c2ddad46f068a3bb6923645f6d4a01e3982a","scripts":{"cov":"tap --coverage-report=html","lint":"standard","test":"tap --100 test/*.test.js","check":"npm test && npm run lint"},"_npmUser":{"name":"davidmarkclements","email":"david.mark.clements@gmail.com"},"precommit":["lint","test"],"repository":{"url":"git+https://github.com/cto-ai/ops-ctrl-account.git","type":"git"},"_npmVersion":"6.14.10","description":"cto.ai account management library","directories":{"test":"test"},"_nodeVersion":"14.15.4","dependencies":{"debug":"^4.3.1","@cto.ai/ops-keycloak":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tap":"^14.11.0","standard":"^16.0.3","pre-commit":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/ops-ctrl-account_1.0.0_1613081203927_0.5800707485517114","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@cto.ai/ops-ctrl-account","version":"1.0.1","keywords":[],"author":{"name":"David Mark Clements","email":"dave@cto.ai"},"license":"MIT","_id":"@cto.ai/ops-ctrl-account@1.0.1","maintainers":[{"name":"davidmarkclements","email":"david.mark.clements@gmail.com"},{"name":"mattcan","email":"gh@matthewcantelon.ca"},{"name":"maumercado","email":"mau@maumercado.com"},{"name":"cto.ai-admin","email":"kc@cto.ai"},{"name":"slajax","email":"kc@kc.io"},{"name":"brettcampbell","email":"brett@cto.ai"},{"name":"ruxandrafed","email":"ruxandra.fediuc@gmail.com"},{"name":"slaterb1","email":"benjamin.ed.slater@gmail.com"},{"name":"jeff_johnson","email":"jeff@cto.ai"},{"name":"jbottein","email":"jeremy@cto.ai"}],"homepage":"https://github.com/cto-ai/ops-ctrl-account#readme","bugs":{"url":"https://github.com/cto-ai/ops-ctrl-account/issues"},"dist":{"shasum":"e7d6e297632f8352a5645f634aa51ae8e53e3c5e","tarball":"https://registry.npmjs.org/@cto.ai/ops-ctrl-account/-/ops-ctrl-account-1.0.1.tgz","fileCount":8,"integrity":"sha512-qo5zk7GkOxBw3WqviPu2+KlyybjwJiFmi/wg9ZYBOipoqnYy88sdYVhCfA1ZCCIiSKJi3yzKAWAmkBXK861+Eg==","signatures":[{"sig":"MEUCIHmkqLs0gFh5HqtXwos99WO4xqZV6tXimRBJYJchMvtcAiEAx4GwS6Bh8+IjuelctaIVokeaEi/ToSTCzLISLQVDZ8A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKv6JCRA9TVsSAnZWagAA04EP/0Y/kHYv7xBNBPcMcp07\nI3x3R2iKKo0L3i+j4LuVopluDeqfenjY0GLN7SoyFgevc5n8IVsVlwP5vt2f\nTLKaWMcUl/PMSpegP2PmTlJChgZCEk/A6eUTp2oA6MTv+u9Z4fTVglruKS+r\nzBh6rDn1AsYSFvkr4t/HWyZQguSS0wVaV7l0LNGKKoxM/TatZkeCqk3QliE1\nY2pVWCK3qKEWxfl+UXFYSLDhSiZxT9CXGNGoXbCWekDA/J/9TCvhIqxVHMce\n2u6I6zFqTYvZR5tyKhySw2lHanuO4FzCB4ZGLJDacEEGO9x14+jQBV6gxXKm\ndbonD2GHgXIaTfQ1/pEHPIPP0Xn/+MFO6xn33MIbuvtPiI5ICKTDHyIo9Goy\nKh3DBEP62SOdZ4wp61ZwGXNbavZ2uqH0/OfwbCsBdVOHAyn1O4N3fmN+TuZs\n6ArJyC9vwTDwCHFXCZdC+edmEsAeno81sCWhn6eqqJFdbeexHnViPcUDuPHe\nhqn9YsnpFp+qURSuZxfNSh9vsvTLJxSKCfP4gEgcA7E744JsQNF3lfGG301f\nB7Vlk5nNomBH/SFaGxDuiD6Ie/RjyjL+tVdDvzeFmlnUsv73YDvgq6NjnM/m\nn53FcCV7Khx0HMDZu8WSvJ03y9EfHEgdNOnYiyFxvPmg0XLPch63XeS3dfr7\ndV6/\r\n=JPtd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","type":"module","gitHead":"3b86bd2f46a82f0b45a64971583f0f1e2a650621","scripts":{"cov":"cov","lint":"standard","test":"tap --100 test/*.test.js","check":"npm test && npm run lint"},"_npmUser":{"name":"davidmarkclements","email":"david.mark.clements@gmail.com"},"precommit":["lint","test"],"repository":{"url":"git+https://github.com/cto-ai/ops-ctrl-account.git","type":"git"},"_npmVersion":"6.14.10","description":"cto.ai account management library","directories":{"test":"test"},"_nodeVersion":"14.15.4","dependencies":{"debug":"^4.3.1","@cto.ai/ops-keycloak":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tapx":"^0.2.0","standard":"^16.0.3","pre-commit":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/ops-ctrl-account_1.0.1_1613430408710_0.8997149276389642","host":"s3://npm-registry-packages"}}},"time":{"created":"2021-02-11T22:06:43.694Z","modified":"2025-09-08T21:14:28.504Z","1.0.0":"2021-02-11T22:06:44.063Z","1.0.1":"2021-02-15T23:06:48.845Z"},"bugs":{"url":"https://github.com/cto-ai/ops-ctrl-account/issues"},"author":{"name":"David Mark Clements","email":"dave@cto.ai"},"license":"MIT","homepage":"https://github.com/cto-ai/ops-ctrl-account#readme","keywords":[],"repository":{"url":"git+https://github.com/cto-ai/ops-ctrl-account.git","type":"git"},"description":"cto.ai account management library","maintainers":[{"email":"kc@cto.ai","name":"cto.ai-admin"},{"email":"kc@kc.io","name":"slajax"},{"email":"brett@cto.ai","name":"brettcampbell"}],"readme":"# @cto.ai/ops-ctrl-account\n\n> cto.ai account management library\n\nJWT-based identity and access management\n\n## API\n\nThis is a native ESM module.\n\n### `account(opts) => instance`\n\n**Options:**\n\n* `realm` - auth server realm name\n* `url` - auth server URL\n* `id` - client id\n* `pages` - an object that must contain the following properties: `signup`, `signin`, `error`. Each must hold a [`Buffer`](https://nodejs.org/api/buffer.html) instance, containin HTML to redirect a users browser after a user has registered, logged in or if there was an error, respectively.\n* `backend` default: `false` -  backend mode limited API. Only functionality that doesn't rely on client-side browser interactions is supplied: `refresh`, `signout` and `signin`, where `signin` must be passed user and password. Pages are not required when `backend` is `true`.\n\n*Tokens objects:*\n\nMuch of the API either accepts or outputs `tokens`. A tokens object has the following shape:\n\n```js\n{\n  accessToken: string\n  refreshToken: string\n  idToken: string\n  sessionState: string\n}\n```\n\n### `instance.signup() => Promise => tokens`\n\nOpens the default browser to the registration URL and supplies `tokens` once the registration process has been completed in the browser.\n\n### `instance.signin(opts) => Promise => tokens`\n\nTriggers a browser-based login flow or logs in with a given username and password.\n\nIf both `user` and `password` options are supplied these credentials will be\nexchanged for `tokens`. Otherwise, opens the default browser to the login URL and supplies `tokens` when the login process has been completed in the browser.\n\n**Options:**\n\n* `user` *Optional* - username\n* `password` *Optional* - password\n\n### `instance.refresh(tokens) => Promise => tokens`\n\nAccepts a `tokens` object and fetches fresh `tokens`.\n\n### `instance.signout(tokens) => Promise`\n\nInvalidates the `tokens` passed.\n\n### `instance.reset(opts)`\n\nWill open a browser at a Keycloak password reset URL, which differs based on the `signedIn` options.\n\n**Options:**\n\n* `signedIn` (`boolean`), Default: `false` - If `true` the browser will open to the logged-in accounts password page. If `false` it will open to reset credentials page.\n\n### `instance.validate(tokens) => boolean`\n\nSee [`accounts.validate`](#keycloak-validate)\n\n### `accounts.validate(tokens) => boolean`\n\nChecks whether `tokens.refreshToken` has expired. If it has `validate` returns `true`, otherwise `false`.\n\n\n## Engines\n\n* Node 12.4+\n* Node 14.0+\n\n## Development\n\nTest:\n\n```sh\nnpm test\n```\n\nVisual coverage report (run after test):\n\n```sh\nnpm run cov\n```\n\nLint:\n\n```sh\nnpm run lint\n```\n\nAutoformat:\n\n```sh\nnpm run lint -- --fix\n```\n\n## Releasing\n\nFor mainline releases:\n\n```sh\nnpm version <major|minor|patch>\ngit push --follow-tags\n```\n\nFor prereleases:\n\n```sh\nnpm version prerelease\ngit push --follow-tags\n```\n\n### License\n\nMIT\n","readmeFilename":"readme.md"}