All files / realm/blong-access/meta/model accessSessionModel.ts

100% Statements 81/81
100% Branches 2/2
100% Functions 1/1
100% Lines 81/81

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 821x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 1x  
import {model} from '@feasibleone/blong';
 
/**
 * accessSessionModel — browse view of the active sessions.
 *
 * Sessions are standalone rows (`access_session`) written on authentication
 * and refreshed on token renewal. The "Close Session" toolbar button calls the
 * custom `access.session.close` action to revoke the selected session.
 */
export default model(
    () =>
        async function accessSessionModel() {
            return {
                subject: 'access',
                object: 'session',
                objectTitle: 'Session',
                public: true,
                nameField: 'session.sessionId',
 
                schema: {
                    properties: {
                        session: {
                            properties: {
                                sessionId: {
                                    title: 'Session',
                                    filter: true,
                                },
                                userId: {title: 'User'},
                                issuedAt: {
                                    title: 'Issued',
                                    widget: {type: 'dateTime'},
                                },
                                expiresAt: {
                                    title: 'Expires',
                                    widget: {type: 'dateTime'},
                                },
                                ipAddress: {title: 'IP'},
                                isRevoked: {
                                    title: 'Revoked',
                                    type: 'boolean',
                                },
                            },
                            widget: {
                                columns: [
                                    'sessionId',
                                    'userId',
                                    'issuedAt',
                                    'expiresAt',
                                    'ipAddress',
                                    'isRevoked',
                                ],
                            },
                        },
                    },
                },
 
                cards: {
                    browse: {
                        label: 'Sessions',
                        widgets: ['session'],
                    },
                },
 
                browser: {
                    title: 'Sessions',
                    icon: 'pi pi-clock',
                    toolbar: [
                        {
                            label: 'Close Session',
                            icon: 'pi pi-times',
                            enabled: 'current',
                            confirm: 'Close this session?',
                            method: 'access.session.close',
                            params: '${current}',
                            refresh: true,
                        },
                    ],
                },
            };
        },
);