@vertikalx/vtx-backend-client
Version:
GraphQL API generated client for VTX
1,842 lines (1,593 loc) • 225 kB
text/typescript
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