{"_id":"@centauroecom/keycloak-mock-sbf","_rev":"1-339d80743f5e16eec9767ddd6ad822f2","name":"@centauroecom/keycloak-mock-sbf","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@centauroecom/keycloak-mock-sbf","version":"1.0.0","description":"Keycloak server mock for Node.js with ROLES","main":"dist/index.js","engines":{"node":">=8.0.0"},"scripts":{"build":"tsc","test":"jest -i tests/","format":"prettier --write '**/*.ts'","format:verify":"prettier --check '**/*.ts'","prepack":"yarn format && yarn build"},"devDependencies":{"@types/jest":"^25.1.3","@types/jsonwebtoken":"^8.3.7","@types/node-jose":"^1.1.2","@types/qs":"^6.9.1","@types/uuid":"^7.0.0","axios":"^0.19.2","jest":"^24.0.0","prettier":"^1.19.1","qs":"^6.9.3","ts-jest":"^24.3.0","typescript":"^3.8.2"},"dependencies":{"@types/lodash":"^4.14.149","jsonwebtoken":"^8.5.1","lodash":"^4.17.15","nock":"^11.9.1","node-jose":"^1.1.3","uuid":"^7.0.2"},"gitHead":"5a28a8482b8fb1fbbb0a33ebb03c3d0ce63b8ddc","_id":"@centauroecom/keycloak-mock-sbf@1.0.0","_nodeVersion":"14.15.3","_npmVersion":"6.14.9","dist":{"integrity":"sha512-Cr3mHCqsF08LHbWjEbNnL2o+eilqNnd9uQUvFaXEY6JniMr3kUztK45XFzEmi/M/sAFt+fkuGqlBFW65+WJ0xA==","shasum":"10978ec71d56c64c490cd737c15319ee2954e2d0","tarball":"https://registry.npmjs.org/@centauroecom/keycloak-mock-sbf/-/keycloak-mock-sbf-1.0.0.tgz","fileCount":52,"unpackedSize":60609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMrQfCRA9TVsSAnZWagAAV/MQAJrk3A4rW82XmApgeVZk\nioHMcLvcHRRB3zYgrZtbCtCRCqdKrK6b4DS2SlYMepIrXJiA13v8ZsuPFgKH\nK+DxrqU+fpN3Nlk2RdJFPEcYubn9TmlNHx1Vi3806kXN7+e01RKomE90UZNk\ng0H8NrswqZIU6Gi9bH1COaHxvrq9Zd04jBnC590Cji3O4+YwSSSXKlFoPlHF\ndweMx2LO0mC0WhU1HqYH+4SbTSThVfly3H0y2GUOieoXjuA/yMXMhaHFJ6nv\nguLVrOFHpzy+bMBrxmUEuZKyoAedkK/JQSfHLh5kHGFxrw5nGmXE14v7lFJy\ndLZ0POCwYbWQek2pU/cAe7P0szKF2wgHyeXur5cQuJ0GJOM7LmCt9xaXNc1Z\nFB1nsIhPv/ehI1kVXPIvwlYCOQ6gc0/KPwDdgD+aEcb7j+nAQd5ec8i8DRYo\nYa1OjcjCpFParO6rHzpGxNQCNmAM0fDVpLq0chEx7tH53fEcwwdy3P/ORUBG\nLI2zdX4jz3PNHQX9psatyit0Ql9pEJb3N/7xobUZO5sJempZdv0YKkt+qj4e\nPmcL93QChyK8OsgZHFQzX6bAFSeayWdL7ypwW2j4TZei3FQC+B/TRGq9l43E\ntrwwow8fv3eNgh2wrhCDy3lpcE2y0CLjwW1E+qbZubD507Ko7w3cYEwxefH3\nFz3k\r\n=8cO3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDegmHp4WHob6pWJBgIoG6SA20blH0BWrw+9PRkt+jFnAIhAKSIAbbuUAivYlinzVhX0fgLAOUqPa9TubwqzkhpKnTA"}]},"_npmUser":{"name":"centauronpm","email":"carlysson.oliveira@centauro.com.br"},"directories":{},"maintainers":[{"name":"centauronpm","email":"carlysson.oliveira@centauro.com.br"},{"name":"talissaandrade","email":"talissa.andrade@centauro.com.br"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/keycloak-mock-sbf_1.0.0_1613935647133_0.25894584207268934"},"_hasShrinkwrap":false}},"time":{"created":"2021-02-21T19:27:26.928Z","1.0.0":"2021-02-21T19:27:27.283Z","modified":"2022-04-04T22:19:16.238Z"},"maintainers":[{"name":"centauronpm","email":"carlysson.oliveira@centauro.com.br"},{"name":"talissaandrade","email":"talissa.andrade@centauro.com.br"}],"description":"Keycloak server mock for Node.js with ROLES","readme":"# Keycloak Mock\n\n[![License](https://img.shields.io/:license-mit-blue.svg)](http://doge.mit-license.org)\n[![NPM version](https://badge.fury.io/js/keycloak-mock.svg)](http://badge.fury.io/js/keycloak-mock)\n![test](https://github.com/SectorLabs/keycloak-mock/workflows/test/badge.svg)\n\nA minimal mock for a Keycloak server to be used in unit tests.\n\nThis mock is not complete and it definitely doesn't match Keycloak completely. Improvements are welcome.\n\n## About\nThis does not launch an actual HTTP server. It uses [`nock`](https://github.com/nock/nock) to patch Node.js HTTP client to intercept requests.\n\nTested with Node.js 8.x, 10.x, 12.x, 13.x\n\n### What works\n* `GET /[realm]/protocol/openid-connect/certs`\n* `GET /[realm]/protocol/openid-connect/userinfo`\n* `GET /admin/realms/[realm]/users`\n* `GET /admin/realms/[realm]/users?username=myusername`\n* `POST /[realm]/protocol/openid-connect/token`\n* `GET /admin/realms/[realm]/users/[userid]`\n* `DELETE /admin/realms/[realm]/users/[userid]`\n* `POST /admin/realms/[realm]/users`\n\n## Usage\n### Basic\n    import * as KeycloakMock from \"keycloak-node-mock\";\n\n    const keycloak = await KeycloakMock.createMockInstance({\n        authServerURL: \"https://myserver.com/auth\",\n        realm: \"myrealm\",\n        clientID: \"client-1\",\n        clientSecret: \"test\",\n    });\n\n    // all requests to `https://myserver.com/auth` will now be\n    // intercepted and replied to\n    const mock = KeycloakMock.activateMock(keycloak);\n\n    // create a user and a token for it\n    const user = keycloak.database.createUser({\n        name: \"test\",\n        email: \"hello@hello.com\", // username will be email\n        credentials: [{\n            value: \"mypassword\",\n        }],\n    });\n\n    console.log(user.profile, user.credentials);\n\n    const token = keycloak.createBearerToken(user.profile.id);\n\n    // get active mock without a reference\n    const sameMock = KeycloakMock.getMock(\"https://myserver.com/auth\");\n\n    // clear user database\n    mock.instance.database.clear();\n\n    // find user profile\n    const sameUser = mock.instance.database.findUserByID(user.profile.id);\n\n    // de-activate the mock\n    KeycloakMock.deactivateMock(sameMock);\n\n## Custom handlers\n\n    import * as KeycloakMock from \"keycloak-node-mock\";\n\n    const keycloak = await KeycloakMock.createMockInstance({\n        authServerURL: \"https://myserver.com/auth\",\n        realm: \"myrealm\",\n        clientID: \"client-1\",\n    });\n\n    keycloak.activateMock(keycloak, {\n       listCertificatesView: (instance, request) => {\n           return [500, \"\"];\n       },\n       getUser: (instance, request) => {\n           // might be null if not authorized\n           console.log(request.user);\n           return [500, \"\"];\n       },\n       deleteUser: (instance, request) => {\n           return [500, \"\"];\n       },\n       getUserInfoView: (instance, request) => {\n           return [500, \"\"];\n       },\n       listUsers: (instance, request) => {\n           return [500, \"\"];\n       },\n       createTokenView: (instance, request, body) => {\n           return [500, \"\"];\n       },\n       createUserView: (instance, request, body) => {\n           return [500, \"\"];\n       },\n    });\n","readmeFilename":"README.md"}