import { pick } from '@shared/core-utils' import { HttpStatusCode, ResultList, UserRegistration, UserRegistrationRequest, UserRegistrationUpdateState } from '@shared/models' import { unwrapBody } from '../requests' import { AbstractCommand, OverrideCommandOptions } from '../shared' export class RegistrationsCommand extends AbstractCommand { register (options: OverrideCommandOptions & Partial & Pick) { const { password = 'password', email = options.username + '@example.com' } = options const path = '/api/v1/users/register' return this.postBodyRequest({ ...options, path, fields: { ...pick(options, [ 'username', 'displayName', 'channel' ]), password, email }, implicitToken: false, defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 }) } requestRegistration ( options: OverrideCommandOptions & Partial & Pick ) { const { password = 'password', email = options.username + '@example.com' } = options const path = '/api/v1/users/registrations/request' return unwrapBody(this.postBodyRequest({ ...options, path, fields: { ...pick(options, [ 'username', 'displayName', 'channel', 'registrationReason' ]), password, email }, implicitToken: false, defaultExpectedStatus: HttpStatusCode.OK_200 })) } // --------------------------------------------------------------------------- accept (options: OverrideCommandOptions & { id: number } & UserRegistrationUpdateState) { const { id } = options const path = '/api/v1/users/registrations/' + id + '/accept' return this.postBodyRequest({ ...options, path, fields: pick(options, [ 'moderationResponse', 'preventEmailDelivery' ]), implicitToken: true, defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 }) } reject (options: OverrideCommandOptions & { id: number } & UserRegistrationUpdateState) { const { id } = options const path = '/api/v1/users/registrations/' + id + '/reject' return this.postBodyRequest({ ...options, path, fields: pick(options, [ 'moderationResponse', 'preventEmailDelivery' ]), implicitToken: true, defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 }) } // --------------------------------------------------------------------------- delete (options: OverrideCommandOptions & { id: number }) { const { id } = options const path = '/api/v1/users/registrations/' + id return this.deleteRequest({ ...options, path, implicitToken: true, defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 }) } // --------------------------------------------------------------------------- list (options: OverrideCommandOptions & { start?: number count?: number sort?: string search?: string } = {}) { const path = '/api/v1/users/registrations' return this.getRequestBody>({ ...options, path, query: pick(options, [ 'start', 'count', 'sort', 'search' ]), implicitToken: true, defaultExpectedStatus: HttpStatusCode.OK_200 }) } // --------------------------------------------------------------------------- askSendVerifyEmail (options: OverrideCommandOptions & { email: string }) { const { email } = options const path = '/api/v1/users/registrations/ask-send-verify-email' return this.postBodyRequest({ ...options, path, fields: { email }, implicitToken: false, defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 }) } verifyEmail (options: OverrideCommandOptions & { registrationId: number verificationString: string }) { const { registrationId, verificationString } = options const path = '/api/v1/users/registrations/' + registrationId + '/verify-email' return this.postBodyRequest({ ...options, path, fields: { verificationString }, implicitToken: false, defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 }) } }