1  |  type Accelo = {   |  
 2  |  	clientId: string   |  
 3  |  	clientSecret: string   |  
 4  |  	deployment: string   |  
 5  |  }   |  
 6  |  
   |  
 7  |  export async function main(   |  
 8  |  	resource: Accelo,   |  
 9  |  	data: {   |  
 10  |  		firstname: string   |  
 11  |  		surname: string   |  
 12  |  		company_id: number   |  
 13  |  		middlename?: string   |  
 14  |  		username?: string   |  
 15  |  		password?: string   |  
 16  |  		title?: string   |  
 17  |  		comments?: string   |  
 18  |  		status?: number   |  
 19  |  		standing?: string   |  
 20  |  		email?: string   |  
 21  |  		country_id?: number   |  
 22  |  		physical_address_id?: number   |  
 23  |  		postal_address_id?: number   |  
 24  |  		phone?: string   |  
 25  |  		fax?: string   |  
 26  |  		position?: string   |  
 27  |  		communication?: string   |  
 28  |  		invoice_method?: string   |  
 29  |  	}   |  
 30  |  ) {   |  
 31  |  	   |  
 32  |  	const accessTokenResponse = (await (   |  
 33  |  		await fetch(`https://${resource.deployment}.api.accelo.com/oauth2/v0/token`, {   |  
 34  |  			method: 'POST',   |  
 35  |  			headers: {   |  
 36  |  				'Content-Type': 'application/x-www-form-urlencoded',   |  
 37  |  				Authorization: `Basic ${Buffer.from(   |  
 38  |  					`${resource.clientId}:${resource.clientSecret}`   |  
 39  |  				).toString('base64')}`   |  
 40  |  			},   |  
 41  |  			body: new URLSearchParams({   |  
 42  |  				grant_type: 'client_credentials',   |  
 43  |  				scope: 'write(all)'   |  
 44  |  			})   |  
 45  |  		})   |  
 46  |  	).json()) as any   |  
 47  |  	const accessToken = accessTokenResponse.access_token   |  
 48  |  
   |  
 49  |  	const form = new URLSearchParams()   |  
 50  |  	Object.entries(data).forEach(([key, value]) => value && form.append(key, value + ''))   |  
 51  |  
   |  
 52  |  	return (   |  
 53  |  		await fetch(`https://${resource.deployment}.api.accelo.com/api/v0/contacts`, {   |  
 54  |  			method: 'POST',   |  
 55  |  			headers: {   |  
 56  |  				'Content-Type': 'application/x-www-form-urlencoded',   |  
 57  |  				Authorization: `Bearer ${accessToken}`   |  
 58  |  			},   |  
 59  |  			body: form   |  
 60  |  		})   |  
 61  |  	).json()   |  
 62  |  }   |  
 63  |  
   |