UNPKG

@vertikalx/vtx-backend-client

Version:

GraphQL API generated client for VTX

1,842 lines (1,593 loc) • 225 kB
import pjson from '../../package.json'; import { CreateActiveUserInput, User, AddValuesResponse, UserToken, UserWithToken, Athlete, createClient, RegisterAthleteDto, Brand, CreateBrandDto, BrandGenqlSelection, AWSS3UploadUrl, AWSS3GetUploadDto, AWSS3UploadUrlGenqlSelection, UserTokenGenqlSelection, RefreshTokenInput, CreateTenantInput, Tenant, TenantGenqlSelection, TenantWithUserLogin, TenantWithUserLoginGenqlSelection, RegisterUserToDomainFromEmailInput, UserGenqlSelection, DecodedToken, Sponsorship, DomainCredential, SponsorshipGenqlSelection, CreateSponsorshipDto, SponsorAthleteInvitation, InviteAthletesDto, SponsorAthleteInvitationGenqlSelection, RegisterUserDto, VerificationCode, VerificationCodeGenqlSelection, UserWithTokenGenqlSelection, VerifyCodeDto, FindSponsorAthleteInvitationDto, FindVtxUserDto, City, CityGenqlSelection, SportLevel, SportLevelGenqlSelection, Sport, SportGenqlSelection, AthleteGenqlSelection, UserImages, UserImagesGenqlSelection, EditValueResponse, EditValueResponseGenqlSelection, EditValueDto, CreateAthleteCompetitionDto, AthleteCompetition, AthleteCompetitionGenqlSelection, SportsEventGenqlSelection, GetSportEventsDto, SportsEvent, CreateSportEventDto, GetAthleteCompetitionsDto, AthleteMembership, AthleteMembershipGenqlSelection, MembershipOrganizationReferenceGenqlSelection, MembershipOrganizationReference, CreateMembershipOrganizationDto, CreateAthleteMembershipDto, DeleteSingleValueDto, DeleteSingleValueResponse, DeleteSingleValueResponseGenqlSelection, FundRaisingCampaign, CreateFundingCampaignDto, FundRaisingCampaignGenqlSelection, AthleteQueryDto, AthleteQueryResponse, AthleteQueryResponseGenqlSelection, StripeAccountGenqlSelection, StripeSessionGenqlSelection, CreateStripeAccountDto, StripeAccount, StripeSession, StripeAccountReferenceGenqlSelection, StripeAccountReference, StripeCheckoutSessionGenqlSelection, StripeCheckoutSession, DonationCheckoutDto, GetDatabaseFileDto, TextDatabaseFileGenqlSelection, TextDatabaseFile, StripeQueryDto, StripeObject, StripeObjectGenqlSelection, SetFundingStatusDto, EditPictureResponseGenqlSelection, EditPictureResponse, AWSS3DeleteBucketFileDto, UploadAlbumsPicturesDto, AddValuesResponseGenqlSelection, AWSS3DeleteUseTypeFileDto, EditPictureDto, AlbumGenqlSelection, Album, CountryGenqlSelection, StateGenqlSelection, State, Country, AWSS3DeleteUseTypeKeyDto, AWSS3CallResultGenqlSelection, AthleteIntegrationReference, AWSS3CallResult, SetCompetitionResultDto, AthleteCompetitionResult, CreateVerificationCodeDto, CodeVerificationResponseGenqlSelection, CodeVerificationResponse, resetPasswordDto, DeleteValuesDto, DeleteValuesResponseGenqlSelection, existValueDto, ExistValueResponse, ExistValueResponseGenqlSelection, Receipt, ReceiptGenqlSelection, ReceiptUrlGenqlSelection, ReceiptUrl, GetReceiptDto } from '../client'; import { ITypedBackendResponse } from './backend-response'; import { APICallHeaders, DEFAULT_HEADERS } from './api-call-headers'; import { buildErrorResponse, buildResponse } from './response-builder'; import { DOMAIN_SPONSOR } from './domains'; import { VTX_ERRORS } from '@vertikalx/vtx-core-common'; import { CodeVerificationResponseType, VerificationCodeType } from '@stackbus/common-types'; // DO NOT EXPORT // FIXME: WE NEED TO REMOVE THIS CONSTANT COMPLETELY // SO WE CAN HAVE BUILDS THAT WORK REGARDLESS OF BACKEND URL // AND WORK IN PROD, PRE-PROD AND LOCAL // ISSUE WAS THAT WHEN RUNNING IN BROWSER THERE IS NO process.env.NODE // SO IT WAS ALWAYS DEFAULTING TO PRODUCTION! @see getDefaultBackendUrl() below // SO NOW WE HAVE A SINGLE CONSTANT, BUT WE REALLY NEED TO REMOVE IT //const BACKEND_URL = 'https://backend.vtxathlete.com:443'; // <-- DO NOT EXPORT //const BACKEND_URL = 'https://backend.vtxapp.net:443'; // <-- DO NOT EXPORT const BACKEND_URL = 'http://localhost:3010'; // <-- DO NOT EXPORT export class VTXBaseAPI { protected headers: APICallHeaders; protected backendUrl: string; protected static Logger = { debug: (str: string) => { //console.debug(str); }, log: (str: string) => { console.log(str); }, warn: (str: string) => { //console.warn(str); }, error: (str: string) => { //console.error(str); }, } constructor(headers?: APICallHeaders, backendUrl?: string) { this.headers = headers ?? DEFAULT_HEADERS; this.backendUrl = backendUrl ?? VTXBaseAPI.getDefaultBackendUrl(); } public getHeaders(): APICallHeaders { return this.headers; } public setHeader(key: string, value: string) { this.headers[key] = value; } public static getDefaultBackendUrl() { let retValue :string = BACKEND_URL; /* let retValue = DEFAULT_PROD_URL; switch (process.env?.NODE_ENV) { case 'production': retValue = DEFAULT_PROD_URL; break; case 'preprod': retValue = DEFAULT_PREPROD_URL; break; case 'development': case 'devlocal': retValue = DEFAULT_DEV_LOCAL_URL; break; case 'devremote': retValue = DEFAULT_DEV_REMOTE_URL; break; default: retValue = DEFAULT_PROD_URL; break; } */ return retValue; } public static getVersion(): string { return pjson?.version ?? '0.0.0'; } public static isBrowser(): boolean { // Check if the environment is Node.js if (typeof process === 'object' && typeof require === 'function') { return false; } // Check if the environment is a // Service worker if (typeof importScripts === 'function') { return false; } // Check if the environment is a Browser if (typeof window === 'object') { return true; } return false; } public async findUserByEmail( email: string, ): Promise<ITypedBackendResponse<User>> { /* const headers: any = {}; headers["Content-Type"] = "application/json"; headers[SYSTEM_ID_HEADER] = system; headers[SYSTEM_KEY_NAME_HEADER] = BACKEND_SYSTEM_KEY_NAME; headers[SYSTEM_KEY_VALUE_HEADER] = BACKEND_SYSTEM_KEY_VALUE; */ const client = createClient({ url: this.backendUrl + '/graphql', headers: this.headers, }); const curatedEmail: string = email.trim().toLocaleLowerCase(); let retValue: ITypedBackendResponse<User> = {}; try { const response: any = await client.query({ findUserByEmail: { __args: { email: curatedEmail, }, _id: true, loginEmail: true, suspended: true, domains: { _id: true, name: true, description: true } }, }); VTXBaseAPI.Logger.debug('findUserByEmail Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<User>(response, 'findUserByEmail', (r: any) => { const isResponseOk: boolean = true && response?.findUserByEmail?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('findUserByEmail err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<User>(err1); } /* if (response?.findUserByEmail?._id) { try { retValue.data = response.findUserByEmail as User; } catch (casterr) { VTXBaseAPI.Logger.debug('Error trying to cast to User'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } } else if (response?.errors) { if (Array.isArray(response.errors)) { retValue.errors = response.errors; } else { retValue.errors = [response.errors]; } } else if (response?.error) { if (Array.isArray(response.error)) { retValue.errors = response.error; } else { retValue.errors = [response.error]; } } else { retValue.errors = ['Error: Obtained incorrect data from Backend']; } } catch (err1) { try { VTXBaseAPI.Logger.debug('ERROR trying to call server'); VTXBaseAPI.Logger.debug(JSON.stringify(err1, null, 2)); } catch (ex) {} if (Array.isArray(err1)) { retValue.errors = err1; } else { retValue.errors = [err1]; } } */ return retValue; } // TODO should be creating from user._id, NOT Email! public async loginUserFromEmail( loginEmail: string, loginMethod: string = "" ): Promise<ITypedBackendResponse<UserToken>> { const client = createClient({ url: this.backendUrl + '/graphql', headers: this.headers, }); const curatedEmail: string = loginEmail.trim().toLocaleLowerCase(); let retValue: ITypedBackendResponse<UserToken> = {}; try { const response: any = await client.mutation({ loginUserFromEmail: { __args: { email: curatedEmail, loginMethod: loginMethod }, actualToken: true, refreshToken: true, }, }); VTXBaseAPI.Logger.debug('loginUserFromEmail Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<UserToken>(response, 'loginUserFromEmail', (r: any) => { const isResponseOk: boolean = true && response?.loginUserFromEmail?.actualToken; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('loginUserFromEmail err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<UserToken>(err1); } /* VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); if (response?.loginUserFromEmail?.actualToken) { try { retValue.data = response.loginUserFromEmail as UserToken; } catch (casterr) { VTXBaseAPI.Logger.debug('Error trying to cast to UserToken:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } } else if (response?.errors) { if (Array.isArray(response.errors)) { retValue.errors = response.errors; } else { retValue.errors = [response.errors]; } } else if (response?.error) { if (Array.isArray(response.error)) { retValue.errors = response.error; } else { retValue.errors = [response.error]; } } else { retValue.errors = ['Error: Obtained incorrect data from Backend']; } } catch (err1) { VTXBaseAPI.Logger.debug(JSON.stringify(err1, null, 2)); if (Array.isArray(err1)) { retValue.errors = err1; } else { retValue.errors = [err1]; } } */ return retValue; } public async createUserAndLogin(loginEmail: string): Promise<ITypedBackendResponse<UserWithToken>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); const curatedEmail: string = loginEmail.trim().toLowerCase(); const payload: CreateActiveUserInput = { loginEmail: curatedEmail } let retValue: ITypedBackendResponse<UserWithToken> = {}; try { const response: any = await client.mutation({ createUserAndLogin: { __args: { user: payload }, _id: true, loginEmail: true, suspended: true, token: { actualToken: true, refreshToken: true } } }); VTXBaseAPI.Logger.debug('createUserAndLogin Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<UserWithToken>(response, 'createUserAndLogin', (r: any) => { const isResponseOk: boolean = true && response?.createUserAndLogin?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('createUserAndLogin err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<UserWithToken>(err1); } /* if (response?.createUserAndLogin?._id){ try{ retValue.data = response.createUserAndLogin as UserWithToken; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to UserToken:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else if (response?.errors){ if (Array.isArray(response.errors)){ retValue.errors = response.errors; }else{ retValue.errors = [response.errors]; } }else if (response?.error){ if (Array.isArray(response.error)){ retValue.errors = response.error; }else{ retValue.errors = [response.error]; } }else if (response?.data?._id){ try{ retValue.data = response?.data as UserWithToken; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to UserWithToken:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else{ retValue.errors = ['Error: Obtained incorrect data from Backend']; } }catch(err1){ VTXBaseAPI.Logger.debug(JSON.stringify(err1,null,2)); if (Array.isArray(err1)){ retValue.errors = err1; }else{ retValue.errors = [err1]; } } */ return retValue; } public async registerAthlete(payload: RegisterAthleteDto): Promise<ITypedBackendResponse<Athlete>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); let retValue: ITypedBackendResponse<Athlete> = {}; const fields: AthleteGenqlSelection = { _id: true, firstName: true, lastName: true, screenName: true, dob: true, lgbt: true, competitionGender: true, country: { _id: true, name: true }, location: { userProvidedLatitude: true, userProvidedLongitude: true, cityNameGeocode: true, stateNameGeocode: true, countryIso2CodeGeocode: true, timeZoneGeocode: true, latitudeGeocode: true, longitudeGeocode: true, city: { _id: true, name: true, localizedName: true, state: { _id: true, name: true, country: { _id: true, name: true } }, latitude: true, longitude: true, timezone: true, } }, trainer: true, trainerUrl: true, aboutMe: true, followStats: { followers: true, followed: true, raves: true, favorites: true }, mainSport: { _id: true, name: true }, mainSportLevel: { _id: true, label: true, index: true }, scores: { vtxScore: true, socialScore: true, trainingScore: true, competitionScore: true }, rankings: { worldRanking: { scope: true, scopeId: true, scopeName: true, position: true, total: true }, countryRanking: { scope: true, scopeId: true, scopeName: true, position: true, total: true }, stateRanking: { scope: true, scopeId: true, scopeName: true, position: true, total: true }, cityRanking: { scope: true, scopeId: true, scopeName: true, position: true, total: true }, }, allSports: { _id: true, name: true }, teams: { _id: true, name: true, description: true, // sports: { // _id: true, // name: true // }, approved: true, logo: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, banner: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true } }, sponsorBrands: { _id: true, name: true, slogan: true, website: true, description: true, approved: true, published: true, logo: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, //banner?: AWSS3FileGenqlSelection, stats: { campaigns: true, sponsorships: true, sports: true, athletes: true }, operatorIds: true, }, competitions: { _id: true, event: { _id: true, name: true, mainSport: { _id: true, name: true }, eventWebSite: true, startDate: true, endDate: true, verified: true, banner: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, location: { _id: true, userProvidedLatitude: true, userProvidedLongitude: true, cityNameGeocode: true, stateNameGeocode: true, countryIso2CodeGeocode: true, timeZoneGeocode: true, latitudeGeocode: true, longitudeGeocode: true, city: { _id: true, name: true, localizedName: true, state: { _id: true, name: true, country: { _id: true, name: true } }, latitude: true, longitude: true, timezone: true, } }, }, participationDate: true, result: { _id: true, resultType: true, position: true, score: true, finishTimeMS: true, resultWebLink: true } }, totalUpcomingCompetitions: true, totalPastCompetitions: true, profilePicture: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, cardPicture: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, preferences: { _id: true, showProfileHelper: true } }; /* const fields:AthleteGenqlSelection = { _id: true, firstName: true, lastName:true, screenName:true, dob:true, country:{ _id: true, name:true }, mainSport:{ _id: true, name:true }, mainSportLevel:{ _id: true, label: true, index: true } } */ try { const response: any = await client.mutation({ registerAthlete: { __args: { input: payload }, ...fields } }); VTXBaseAPI.Logger.debug('registerAthlete Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<Athlete>(response, 'registerAthlete', (r: any) => { const isResponseOk: boolean = true && response?.registerAthlete?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('registerAthlete err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<Athlete>(err1); } /* VTXBaseAPI.Logger.debug(JSON.stringify(response,null,2)); if (response?.registerAthlete?._id){ try{ retValue.data = response?.registerAthlete as Athlete; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to Athlete:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else if (response?.errors){ if (Array.isArray(response.errors)){ retValue.errors = response.errors; }else{ retValue.errors = [response.errors]; } }else if (response?.error){ if (Array.isArray(response.error)){ retValue.errors = response.error; }else{ retValue.errors = [response.error]; } }else if (response?.data?._id){ try{ retValue.data = response?.data as Athlete; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to Athlete:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else{ retValue.errors = ['Error: Obtained incorrect data from Backend']; } }catch(err1){ VTXBaseAPI.Logger.debug(JSON.stringify(err1,null,2)); if (Array.isArray(err1)){ retValue.errors = err1; }else{ retValue.errors = [err1]; } } */ return retValue; } public async findBrandByName(name: string, translations: boolean = false): Promise<ITypedBackendResponse<Brand>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); let retValue: ITypedBackendResponse<Brand> = {}; try { let response: any = null; if (translations) { response = await client.query({ getBrandByName: { __args: { name: name, translations: true }, _id: true, name: true, slogan: true, website: true, description: true, logo: { name: true, contentType: true, size: true, useType: true, url: true, key: true }, banner: { name: true, contentType: true, size: true, useType: true, url: true, key: true }, translations: { name: true, slogan: true, description: true, language: true }, } }); } else { response = await client.query({ getBrandByName: { __args: { name: name, translations: false }, _id: true, name: true, slogan: true, website: true, description: true, logo: { name: true, contentType: true, size: true, useType: true, url: true, key: true }, banner: { name: true, contentType: true, size: true, useType: true, url: true, key: true } } }); } VTXBaseAPI.Logger.debug('getBrandByName Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<Brand>(response, 'getBrandByName', (r: any) => { const isResponseOk: boolean = true && response?.getBrandByName?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('getBrandByName err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<Brand>(err1); } /* if (response?.getBrandByName?._id){ try{ retValue.data = response?.getBrandByName as Brand; }catch(casterr){ //VTXBaseAPI.Logger.debug('Error trying to cast to Brand:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else if (response?.errors){ if (Array.isArray(response.errors)){ retValue.errors = response.errors; }else{ retValue.errors = [response.errors]; } }else if (response?.error){ if (Array.isArray(response.error)){ retValue.errors = response.error; }else{ retValue.errors = [response.error]; } }else if (response?.data?._id){ try{ retValue.data = response?.data as Brand; }catch(casterr){ //VTXBaseAPI.Logger.debug('Error trying to cast to Brand:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else{ retValue.errors = ['Error: Obtained incorrect data from Backend']; } }catch(err1){ //VTXBaseAPI.Logger.debug(JSON.stringify(err1,null,2)); if (Array.isArray(err1)){ retValue.errors = err1; }else{ retValue.errors = [err1]; } } */ return retValue; } public async createBrand(dto: CreateBrandDto, desiredFields?: BrandGenqlSelection): Promise<ITypedBackendResponse<Brand>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); let retValue: ITypedBackendResponse<Brand> = {}; const fields: BrandGenqlSelection = desiredFields ?? { _id: true }; try { const response: any = await client.mutation({ createBrand: { __args: { input: dto }, ...fields } }); VTXBaseAPI.Logger.debug('createBrand Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<Brand>(response, 'createBrand', (r: any) => { const isResponseOk: boolean = true && response?.createBrand?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('createBrand err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<Brand>(err1); } /* if (response?.createBrand?._id){ try{ retValue.data = response?.createBrand as Brand; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to Brand:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else if (response?.errors){ if (Array.isArray(response.errors)){ retValue.errors = response.errors; }else{ retValue.errors = [response.errors]; } }else if (response?.error){ if (Array.isArray(response.error)){ retValue.errors = response.error; }else{ retValue.errors = [response.error]; } }else if (response?.data?._id){ try{ retValue.data = response?.data as Brand; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to Brand:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else{ retValue.errors = ['Error: Obtained incorrect data from Backend']; } }catch(err1){ VTXBaseAPI.Logger.debug(JSON.stringify(err1,null,2)); if (Array.isArray(err1)){ retValue.errors = err1; }else{ retValue.errors = [err1]; } } */ return retValue; } public async createSponsorship(dto: CreateSponsorshipDto, desiredFields?: SponsorshipGenqlSelection): Promise<ITypedBackendResponse<Sponsorship>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); let retValue: ITypedBackendResponse<Sponsorship> = {}; const fields: SponsorshipGenqlSelection = desiredFields ?? { _id: true }; try { const response: any = await client.mutation({ createSponsorship: { __args: { input: dto }, ...fields } }); VTXBaseAPI.Logger.debug('createSponsorship Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<Sponsorship>(response, 'createSponsorship', (r: any) => { const isResponseOk: boolean = true && response?.createSponsorship?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('createSponsorship err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<Sponsorship>(err1); } /* VTXBaseAPI.Logger.debug('Create Sponsorship Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response,null,2)); if (response?.createSponsorship?._id){ try{ retValue.data = response?.createSponsorship as Sponsorship; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to Sponsorship:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else if (response?.errors){ if (Array.isArray(response.errors)){ retValue.errors = response.errors; }else{ retValue.errors = [response.errors]; } }else if (response?.error){ if (Array.isArray(response.error)){ retValue.errors = response.error; }else{ retValue.errors = [response.error]; } }else if (response?.data?._id){ try{ retValue.data = response?.data as Sponsorship; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to Sponsorship:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else{ retValue.errors = ['Error: Obtained incorrect data from Backend']; } }catch(err1){ VTXBaseAPI.Logger.debug(JSON.stringify(err1,null,2)); if (Array.isArray(err1)){ retValue.errors = err1; }else{ retValue.errors = [err1]; } } */ return retValue; } public async getS3UploadUrl(dto: AWSS3GetUploadDto): Promise<ITypedBackendResponse<AWSS3UploadUrl>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); let retValue: ITypedBackendResponse<AWSS3UploadUrl> = {}; const fields: AWSS3UploadUrlGenqlSelection = { uploadUrl: true, fields: { key: true, value: true }, downloadUrl: true, bucket: true, key: true }; try { const response = await client.query({ getUploadUrl: { __args: { input: dto }, ...fields } }); VTXBaseAPI.Logger.debug('getUploadUrl Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<AWSS3UploadUrl>(response, 'getUploadUrl', (r: any) => { const isResponseOk: boolean = true && ((response?.getUploadUrl?.uploadUrl !== undefined) && (response?.getUploadUrl?.uploadUrl !== null)) return isResponseOk; } ); } catch (err1) { VTXBaseAPI.Logger.error('createSponsorship err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<AWSS3UploadUrl>(err1); } /* if (response?.getUploadUrl?.key){ try{ retValue.data = response?.getUploadUrl as AWSS3UploadUrl; }catch(casterr){ VTXBaseAPI.Logger.debug('Error trying to cast to AWSS3UploadUrl:'); retValue.errors = ['Error: Obtained incorrect data from Backend']; } }else{ retValue.errors = ["Unable to generate correct upload URL"]; } }catch(err1){ VTXBaseAPI.Logger.debug(JSON.stringify(err1,null,2)); if (Array.isArray(err1)){ retValue.errors = err1; }else{ retValue.errors = [err1]; } } */ return retValue; } public async refreshToken(currentToken: string, refreshToken: string): Promise<ITypedBackendResponse<UserToken>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); VTXBaseAPI.Logger.debug('HEADERS:'); VTXBaseAPI.Logger.debug(JSON.stringify(this.headers, null, 2)); const fields: UserTokenGenqlSelection = { actualToken: true, refreshToken: true }; const dto: RefreshTokenInput = { refreshToken: refreshToken }; let retValue: ITypedBackendResponse<UserToken>; try { const response: any = await client.mutation({ refreshToken: { __args: { dto: dto }, ...fields } }); VTXBaseAPI.Logger.debug('refreshToken Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<UserToken>(response, 'refreshToken', (r: any) => { const isResponseOk: boolean = true && response?.refreshToken?.refreshToken; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('refreshToken err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<UserToken>(err1); } return retValue; } public async registerNewDomainTenant(input: CreateTenantInput): Promise<ITypedBackendResponse<Tenant>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); //VTXBaseAPI.Logger.debug('HEADERS:'); //VTXBaseAPI.Logger.debug(JSON.stringify(this.headers, null, 2)); const fields: TenantGenqlSelection = { _id: true, name: true, email: true, tenant_uri: true, owner: { _id: true, loginEmail: true, suspended: true }, domain: { _id: true, name: true, description: true } }; let retValue: ITypedBackendResponse<Tenant>; try { const response: any = await client.mutation({ registerNewDomainTenant: { __args: { tenant: input }, ...fields } }); VTXBaseAPI.Logger.debug('registerNewDomainTenant Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<Tenant>(response, 'registerNewDomainTenant', (r: any) => { const isResponseOk: boolean = true && response?.registerNewDomainTenant?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('registerNewDomainTenant err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<Tenant>(err1); } return retValue; } public async registerNewDomainTenantWithLogin(input: CreateTenantInput): Promise<ITypedBackendResponse<TenantWithUserLogin>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); //VTXBaseAPI.Logger.debug('HEADERS:'); //VTXBaseAPI.Logger.debug(JSON.stringify(this.headers, null, 2)); const fields: TenantWithUserLoginGenqlSelection = { _id: true, name: true, email: true, tenant_uri: true, owner: { _id: true, loginEmail: true, suspended: true }, domain: { _id: true, name: true, description: true }, user: { _id: true, loginEmail: true, suspended: true, domains: { _id: true, name: true, description: true }, token: { actualToken: true, refreshToken: true } } }; let retValue: ITypedBackendResponse<TenantWithUserLogin>; try { const response: any = await client.mutation({ registerNewDomainTenantWithLogin: { __args: { tenant: input }, ...fields } }); VTXBaseAPI.Logger.debug('registerNewDomainTenant Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<TenantWithUserLogin>(response, 'TenantWithUserLogin', (r: any) => { const isResponseOk: boolean = true && response?.TenantWithUserLogin?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('registerNewDomainTenantWithLogin err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<TenantWithUserLogin>(err1); } return retValue; } public async registerUserToDomainFromEmail(input: RegisterUserToDomainFromEmailInput): Promise<ITypedBackendResponse<User>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); //VTXBaseAPI.Logger.debug('HEADERS:'); //VTXBaseAPI.Logger.debug(JSON.stringify(this.headers, null, 2)); const fields: UserGenqlSelection = { _id: true, loginEmail: true, suspended: true, domains: { _id: true, name: true, description: true, tenant: { _id: true, name: true, tenant_uri: true } } }; let retValue: ITypedBackendResponse<User>; try { const response: any = await client.mutation({ registerUserToDomainFromEmail: { __args: { input: input }, ...fields } }); VTXBaseAPI.Logger.debug('registerUserToDomainFromEmail Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<User>(response, 'registerUserToDomainFromEmail', (r: any) => { const isResponseOk: boolean = true && response?.registerUserToDomainFromEmail?.loginEmail; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('registerUserToDomainFromEmail err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<User>(err1); } return retValue; } public async getPublicSponsorships(): Promise<ITypedBackendResponse<Sponsorship[]>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); //VTXBaseAPI.Logger.debug('HEADERS:'); //VTXBaseAPI.Logger.debug(JSON.stringify(this.headers, null, 2)); const fields: SponsorshipGenqlSelection = { _id: true, title: true, description: true, cashValue: true, otherValue: true, brand: { _id: true, name: true, slogan: true, website: true, description: true, approved: true, published: true, logo: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, banner: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, stats: { campaigns: true, sponsorships: true, sports: true, athletes: true }, operatorIds: true }, banner: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, criteria: { _id: true, label: true, qualifications: { on_AgeQualification: { type: true, value: true, operator: true }, on_DistanceQualification: { type: true, maxDistance: true, latitude: true, longitude: true }, on_GenderQualification: { type: true, operator: true, values: true }, on_LocationQualification: { type: true, operator: true, countries: { _id: true, name: true }, states: { _id: true, name: true, country: { _id: true, name: true } }, cities: { _id: true, name: true, localizedName: true, state: { _id: true, name: true, country: { _id: true, name: true } }, latitude: true, longitude: true, timezone: true } }, on_NationalityQualification: { type: true, operator: true, countries: { _id: true, name: true } }, on_ScoreQualification: { type: true, scoreType: true, operator: true, value: true }, on_SportsLevelQualification: { type: true, operator: true, level: true }, on_SportsQualification: { type: true, sports: true, operator: true } } }, sponsorshipItems: { _id: true, quantity: true, title: true, value: true, type: true }, deadline: true, startDate: true, duration: { length: true, unit: true }, terms: true, isPrivate: true, stats: { totalApplications: true, newApplications: true, discardedApplications: true, selectedApplications: true, approvedApplications: true, grantedSponsorships: true, remainingSponsorships: true }, approved: true, published: true }; let retValue: ITypedBackendResponse<Sponsorship[]>; try { const response: any = await client.query({ getPublicSponsorships: { __args: {}, ...fields } }); VTXBaseAPI.Logger.debug('getPublicSponsorships Response:'); VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); retValue = buildResponse<Sponsorship[]>(response, 'getPublicSponsorships', (r: any) => { VTXBaseAPI.Logger.debug(JSON.stringify(response, null, 2)); const isResponseOk: boolean = true;//&& response?.getPublicSponsorships?._id; return isResponseOk } ); } catch (err1) { VTXBaseAPI.Logger.error('getPublicSponsorships err1:'); VTXBaseAPI.Logger.error(err1); retValue = buildErrorResponse<Sponsorship[]>(err1); } return retValue; } public async getTenantSponsorshipsFromUri(tenantUri: string, token: DecodedToken): Promise<ITypedBackendResponse<Sponsorship[]>> { if ((!tenantUri) || (tenantUri.trim() === "")) { return { error: { httpStatus: 400, code: VTX_ERRORS.INVALID_TENANT_URI.code, message: VTX_ERRORS.INVALID_TENANT_URI.description } }; } const credential: DomainCredential | undefined = token.domains.find(c => { if (c.tenant) { if ((c.tenant.tenant_uri == tenantUri) && (c._id == DOMAIN_SPONSOR)) { return true; } } return false; }); if (!credential) { return { error: { httpStatus: 400, code: VTX_ERRORS.INVALID_TENANT_URI_FOR_SPONSOR.code, message: "Tenant in domain SPONSOR not found in domains with URI " + tenantUri } }; } const tenantId: string | null = credential.tenant?._id ?? null; if ((!tenantId) || (tenantId == "ALL")) { return { error: { httpStatus: 400, code: VTX_ERRORS.INVALID_TENANT_ID.code, message: VTX_ERRORS.INVALID_TENANT_ID.description } }; } return this.getTenantSponsorships(tenantId); } public async getTenantSponsorships(tenantId: string): Promise<ITypedBackendResponse<Sponsorship[]>> { const client = createClient({ url: this.backendUrl + "/graphql", headers: this.headers, }); //VTXBaseAPI.Logger.debug('HEADERS:'); //VTXBaseAPI.Logger.debug(JSON.stringify(this.headers, null, 2)); const fields: SponsorshipGenqlSelection = { _id: true, title: true, description: true, cashValue: true, otherValue: true, brand: { _id: true, name: true, slogan: true, website: true, description: true, approved: true, published: true, logo: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, banner: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, stats: { campaigns: true, sponsorships: true, sports: true, athletes: true }, operatorIds: true }, banner: { _id: true, name: true, contentType: true, size: true, useType: true, url: true, key: true }, criteria: { _id: true, label: true, qualifications: { on_AgeQualification: { type: true, value: true, operator: true }, on_DistanceQualification: { type: true, maxDistance: true, latitude: true, longitude: true }, on_GenderQualification: { type: true, operator: true, values: true }, on_LocationQualification: { type: true, operator: true, countries: { _id: true, name: true }, states: { _id: true, name: true, country: { _id: true, name: true } }, cities: { _id: true, name: true, localizedName: true, state: { _id: true, name: true, country: { _id: true, name: true } }, latitude: true, longitude: true, timezone: true } }, on_NationalityQualification: { type: true, operator: true, countries: { _id: true, name: true } }, on_ScoreQualification: { type: true, scoreType: true, operator: true, value: true }, on_SportsLevelQualification: { type: true, operator: true, level: true }, on_SportsQualification: { type: true, sports: true, operator: true } } }, sponsorshipItems: { _id: true, quantity: true, title: true, value: true, type: true }, deadline: true, startDate: true, duration: { length: true, unit: true }, terms: true, isPrivate: true, stats: { totalApplications: true, newApplications: true, discardedApplications: true, selectedApplications: true, approvedApplications: true, grantedSponsorships: true, remainingSponsorships: true }, approved: true, published: true }; let retValue: ITypedBackendResponse<Sponsorship[]>; try { const response: any = awa