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

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

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 82 83 841x 1x 1x 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 7x 7x 7x 7x 1x  
import {validation} from '@feasibleone/blong';
 
/**
 * `access.user.add` — explicit validation override.
 *
 * The auto-generated `subject.validation` schema requires the `uidNotNull`
 * `user.userId` on add, but the id is generated server-side
 * (`core.resource.ensure`). This override replaces it so the New form can
 * submit `{user: {emailAddress, isActive}, credential, role}`.
 */
export default validation(
    async ({lib: {type}}) =>
        function accessUserAdd() {
            return {
                params: type.Object(
                    {
                        user: type.Optional(
                            type.Object(
                                {
                                    userName: type.Optional(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.
                        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}),
            };
        },
);