# @iris.interactive/keycloak-mock

> Keycloak server mock for Node.js with Roles and Realm Roles

Latest version **1.0.0** (published 2023-01-19) · MIT license · 0 weekly downloads

## Install

```sh
npm install @iris.interactive/keycloak-mock
pnpm add @iris.interactive/keycloak-mock
yarn add @iris.interactive/keycloak-mock
bun add @iris.interactive/keycloak-mock
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2023-01-19 |
| First published | 2023-01-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=8.0.0 |
| Dependencies | 6 |
| Unpacked size | 64.3 KB |
| Known vulnerabilities | 0 (+5 in 3 direct dependencies) |
| Install scripts | no |
| Author | IRIS Interactive |
| Maintainers | iris.interactive |
| Keywords | keycloak, keycloak-mock |

## Links

- npm: https://www.npmjs.com/package/@iris.interactive/keycloak-mock
- npm.io page: https://npm.io/package/@iris.interactive/keycloak-mock

## Dependencies (6)

- [nock](https://npm.io/package/nock.md) ^11.9.1
- [uuid](https://npm.io/package/uuid.md) ^7.0.2
- [lodash](https://npm.io/package/lodash.md) ^4.17.15
- [node-jose](https://npm.io/package/node-jose.md) ^1.1.3
- [jsonwebtoken](https://npm.io/package/jsonwebtoken.md) ^8.5.1
- [@types/lodash](https://npm.io/package/@types/lodash.md) ^4.14.149

## Alternatives

- [pagerjs](https://npm.io/package/pagerjs.md) — 60 weekly downloads
- [whistle.savefor-mock](https://npm.io/package/whistle.savefor-mock.md) — 4 weekly downloads
- [@msw/sveltekit](https://npm.io/package/@msw/sveltekit.md) — 0 weekly downloads
- [instagram-graph-test-server](https://npm.io/package/instagram-graph-test-server.md) — 0 weekly downloads
- [design-recall](https://npm.io/package/design-recall.md) — 0 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2023-01-19

## README

# Keycloak Mock

[![License](https://img.shields.io/:license-mit-blue.svg)](http://doge.mit-license.org)
[![NPM version](https://badge.fury.io/js/keycloak-mock.svg)](http://badge.fury.io/js/keycloak-mock)
![test](https://github.com/SectorLabs/keycloak-mock/workflows/test/badge.svg)

A minimal mock for a Keycloak server to be used in unit tests.

This mock is not complete and it definitely doesn't match Keycloak completely. Improvements are welcome.

## About
This does not launch an actual HTTP server. It uses [`nock`](https://github.com/nock/nock) to patch Node.js HTTP client to intercept requests.

Tested with Node.js 8.x, 10.x, 12.x, 13.x

## Fork
Fork from repository https://www.npmjs.com/package/@felipe3246/keycloak-mock
Add introspect 

### What works
* `GET /[realm]/protocol/openid-connect/certs`
* `GET /[realm]/protocol/openid-connect/userinfo`
* `GET /admin/realms/[realm]/users`
* `GET /admin/realms/[realm]/users?username=myusername`
* `POST /[realm]/protocol/openid-connect/token`
* `POST /[realm]/protocol/openid-connect/token/introspect`
* `GET /admin/realms/[realm]/users/[userid]`
* `DELETE /admin/realms/[realm]/users/[userid]`
* `POST /admin/realms/[realm]/users`

## Usage
### Basic
    import * as KeycloakMock from "keycloak-node-mock";

    const keycloak = await KeycloakMock.createMockInstance({
        authServerURL: "https://myserver.com/auth",
        realm: "myrealm",
        clientID: "client-1",
        clientSecret: "test",
    });

    // all requests to `https://myserver.com/auth` will now be
    // intercepted and replied to
    const mock = KeycloakMock.activateMock(keycloak);

    // create a user and a token for it
    const user = keycloak.database.createUser({
        name: "test",
        email: "hello@hello.com", // username will be email
        credentials: [{
            value: "mypassword",
        }],
    });

    console.log(user.profile, user.credentials);

    const token = keycloak.createBearerToken(user.profile.id);

    // get active mock without a reference
    const sameMock = KeycloakMock.getMock("https://myserver.com/auth");

    // clear user database
    mock.instance.database.clear();

    // find user profile
    const sameUser = mock.instance.database.findUserByID(user.profile.id);

    // de-activate the mock
    KeycloakMock.deactivateMock(sameMock);

## Custom handlers

    import * as KeycloakMock from "keycloak-node-mock";

    const keycloak = await KeycloakMock.createMockInstance({
        authServerURL: "https://myserver.com/auth",
        realm: "myrealm",
        clientID: "client-1",
    });

    keycloak.activateMock(keycloak, {
       listCertificatesView: (instance, request) => {
           return [500, ""];
       },
       getUser: (instance, request) => {
           // might be null if not authorized
           console.log(request.user);
           return [500, ""];
       },
       deleteUser: (instance, request) => {
           return [500, ""];
       },
       getUserInfoView: (instance, request) => {
           return [500, ""];
       },
       listUsers: (instance, request) => {
           return [500, ""];
       },
       createTokenView: (instance, request, body) => {
           return [500, ""];
       },
       createUserView: (instance, request, body) => {
           return [500, ""];
       },
    });

---
_Source: https://npm.io/package/@iris.interactive/keycloak-mock · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
