RocketChat/Rocket.Chat

View on GitHub
packages/rest-typings/src/v1/invites.ts

Summary

Maintainability
B
4 hrs
Test Coverage
import type { IInvite, IRoom } from '@rocket.chat/core-typings';
import type { JSONSchemaType } from 'ajv';
import Ajv from 'ajv';

const ajv = new Ajv({
    coerceTypes: true,
});

type UseInviteTokenProps = {
    token: string;
};

const UseInviteTokenPropsSchema: JSONSchemaType<UseInviteTokenProps> = {
    type: 'object',
    properties: {
        token: {
            type: 'string',
        },
    },
    required: ['token'],
    additionalProperties: false,
};

export const isUseInviteTokenProps = ajv.compile<UseInviteTokenProps>(UseInviteTokenPropsSchema);

type ValidateInviteTokenProps = {
    token: string;
};

const ValidateInviteTokenPropsSchema: JSONSchemaType<ValidateInviteTokenProps> = {
    type: 'object',
    properties: {
        token: {
            type: 'string',
        },
    },
    required: ['token'],
    additionalProperties: false,
};

export const isValidateInviteTokenProps = ajv.compile<ValidateInviteTokenProps>(ValidateInviteTokenPropsSchema);

type FindOrCreateInviteParams = { rid: IRoom['_id']; days: number; maxUses: number };

const FindOrCreateInviteParamsSchema: JSONSchemaType<FindOrCreateInviteParams> = {
    type: 'object',
    properties: {
        rid: {
            type: 'string',
        },
        days: {
            type: 'integer',
        },
        maxUses: {
            type: 'integer',
        },
    },
    required: ['rid', 'days', 'maxUses'],
    additionalProperties: false,
};

export const isFindOrCreateInviteParams = ajv.compile<FindOrCreateInviteParams>(FindOrCreateInviteParamsSchema);

type SendInvitationEmailParams = {
    emails: string[];
};

const SendInvitationEmailParamsSchema: JSONSchemaType<SendInvitationEmailParams> = {
    type: 'object',
    properties: {
        emails: {
            type: 'array',
            items: {
                type: 'string',
            },
        },
    },
    required: ['emails'],
    additionalProperties: false,
};

export const isSendInvitationEmailParams = ajv.compile<SendInvitationEmailParams>(SendInvitationEmailParamsSchema);

export type InvitesEndpoints = {
    '/v1/listInvites': {
        GET: () => Array<IInvite>;
    };
    '/v1/removeInvite/:_id': {
        DELETE: () => boolean;
    };
    '/v1/useInviteToken': {
        POST: (params: UseInviteTokenProps) => {
            room: {
                rid: IRoom['_id'];
                prid: IRoom['prid'];
                fname: IRoom['fname'];
                name: IRoom['name'];
                t: IRoom['t'];
            };
        };
    };
    '/v1/validateInviteToken': {
        POST: (params: ValidateInviteTokenProps) => { valid: boolean };
    };
    '/v1/findOrCreateInvite': {
        POST: (params: FindOrCreateInviteParams) => IInvite;
    };
    '/v1/sendInvitationEmail': {
        POST: (params: SendInvitationEmailParams) => { success: boolean };
    };
};