| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import { fetchJson, fetchNothing } from '@overleaf/fetch-utils'
- class MailChimpClient {
- constructor(apiKey) {
- this.apiKey = apiKey
- this.dc = apiKey.split('-')[1]
- this.baseUrl = `https://${this.dc}.api.mailchimp.com/3.0/`
- this.fetchOptions = {
- method: 'GET',
- basicAuth: {
- user: 'any',
- password: this.apiKey,
- },
- }
- }
- async request(path, options) {
- try {
- const requestUrl = `${this.baseUrl}${path}`
- if (options.method === 'GET') {
- return await fetchJson(requestUrl, options)
- }
- await fetchNothing(requestUrl, options)
- } catch (err) {
- // if there's a json body in the response, expose it in the error (for compatibility with node-mailchimp)
- const errorBody = err.body ? JSON.parse(err.body) : {}
- const errWithBody = Object.assign(err, errorBody)
- throw errWithBody
- }
- }
- async get(path) {
- return await this.request(path, this.fetchOptions)
- }
- async put(path, body) {
- const options = Object.assign({}, this.fetchOptions)
- options.method = 'PUT'
- options.json = body
- return await this.request(path, options)
- }
- async post(path, body) {
- const options = Object.assign({}, this.fetchOptions)
- options.method = 'POST'
- options.json = body
- return await this.request(path, options)
- }
- async delete(path) {
- const options = Object.assign({}, this.fetchOptions)
- options.method = 'DELETE'
- return await this.request(path, options)
- }
- async patch(path, body) {
- const options = Object.assign({}, this.fetchOptions)
- options.method = 'PATCH'
- options.json = body
- return await this.request(path, options)
- }
- }
- export default MailChimpClient
|