All files / realm/blong-access/gateway/access accessUserEdit.ts

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

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 781x 1x 1x 1x 1x 1x 1x 1x 1x 1x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 1x  
import {validation} from '@feasibleone/blong';
 
/**
 * `access.user.edit` — explicit validation override matching the custom
 * handler's accepted shape (`user` key + optional `credential` / `role` detail
 * arrays and the scope × CRUD `matrix`). The auto-generated schema would
 * require the full `user` record.
 */
export default validation(
    async ({lib: {type}}) =>
        function accessUserEdit() {
            return {
                params: type.Object(
                    {
                        user: type.Object(
                            {
                                userId: type.String(),
                                emailAddress: type.Optional(
                                    type.Union([type.String(), type.Null()]),
                                ),
                                isActive: type.Optional(
                                    type.Union([type.Boolean(), type.Literal(0), type.Literal(1)]),
                                ),
                            },
                            {additionalProperties: true},
                        ),
                        credential: type.Optional(
                            type.Array(type.Object({}, {additionalProperties: true})),
                        ),
                        role: type.Optional(
                            type.Array(
                                type.Object(
                                    {
                                        roleId: type.Optional(type.String()),
                                        roleName: type.Optional(type.String()),
                                    },
                                    {additionalProperties: true},
                                ),
                            ),
                        ),
                        // The scope × CRUD ACL matrix of the "Record Access" tab.
                        // A cell may be `null`: the tri-state blank means "no
                        // rule", which is how a rule is released.
                        matrix: type.Optional(
                            type.Array(
                                type.Object(
                                    {
                                        targetId: type.Optional(type.String()),
                                        targetName: type.Optional(type.String()),
                                        entityName: type.Optional(type.String()),
                                        find: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        get: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        add: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        edit: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        remove: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                    },
                                    {additionalProperties: true},
                                ),
                            ),
                        ),
                    },
                    {additionalProperties: true},
                ),
                result: type.Object({}, {additionalProperties: true}),
            };
        },
);