@sumup/sdk
Version:
The official TypeScript SDK for the SumUp API
514 lines (513 loc) • 14.6 kB
JavaScript
var _computedKey;
class APIResource {
_client;
constructor(client){
this._client = client;
}
}
class SumUpError extends Error {
}
class APIError extends SumUpError {
status;
error;
response;
constructor(status, error, response){
const message = "string" == typeof error ? error : JSON.stringify(error);
super(`${status}: ${message}`);
this.status = status;
this.error = error;
this.response = response;
}
}
_computedKey = Symbol.toStringTag;
class APIPromise {
resp;
constructor(resp){
this.resp = resp;
}
async parse() {
const res = await this.resp;
const contentType = res.headers.get("content-type");
const isJSON = contentType?.includes("application/json");
if (!isJSON) throw new SumUpError("Unexpected non-json response.");
return await res.json();
}
async withResponse() {
const [data, response] = await Promise.all([
this.parse(),
await this.resp
]);
return {
data,
response
};
}
then(onFulfilled, onRejected) {
return this.parse().then(onFulfilled, onRejected);
}
catch(onRejected) {
return this.parse().catch(onRejected);
}
finally(onFinally) {
return this.parse().finally(onFinally);
}
[_computedKey] = "APIPromise";
}
const VERSION = "0.0.4";
class HTTPClient {
host;
apiKey;
baseParams;
constructor({ apiKey, host = "https://api.sumup.com", baseParams = {} } = {}){
this.host = host;
this.apiKey = apiKey;
const headers = new Headers({
Accept: "application/json",
"Content-Type": "application/json",
"User-Agent": `${this.constructor.name.toLowerCase()}-ts/${VERSION}`
});
if (apiKey) headers.append("Authorization", `Bearer ${apiKey}`);
this.baseParams = mergeParams({
headers
}, baseParams);
}
get({ ...params }) {
return this.request({
method: "GET",
...params
});
}
post({ ...params }) {
return this.request({
method: "POST",
...params
});
}
put({ ...params }) {
return this.request({
method: "put",
...params
});
}
patch({ ...params }) {
return this.request({
method: "PATCH",
...params
});
}
delete({ ...params }) {
return this.request({
method: "DELETE",
...params
});
}
request({ body, path, query, host: hostOverride, ...fetchParams }) {
const host = hostOverride || this.host;
const url = new URL(host + (host.endsWith("/") && path.startsWith("/") ? path.slice(1) : path));
if ("object" == typeof query && query && !Array.isArray(query)) url.search = this.stringifyQuery(query);
const init = {
...mergeParams(this.baseParams, fetchParams),
body: JSON.stringify(body)
};
return new APIPromise(this.do(url, init));
}
async do(input, init) {
const res = await fetch(input, init);
if (!res.ok) {
const contentType = res.headers.get("content-type");
const isJSON = contentType?.includes("application/json");
throw new APIError(res.status, isJSON ? await res.json() : await res.text(), res);
}
return res;
}
stringifyQuery(query) {
return Object.entries(query).filter(([_, value])=>void 0 !== value).map(([key, value])=>{
if ("string" == typeof value || "number" == typeof value || "boolean" == typeof value) return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
if (null === value) return `${encodeURIComponent(key)}=`;
if (Array.isArray(value)) return value.map((v)=>`${encodeURIComponent(key)}=${encodeURIComponent(v)}`).join("&");
throw new Error(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null.`);
}).join("&");
}
}
function mergeParams(a, b) {
const headers = new Headers(a.headers);
for (const [key, value] of new Headers(b.headers).entries())headers.set(key, value);
return {
...a,
...b,
headers
};
}
class Checkouts extends APIResource {
listAvailablePaymentMethods(merchantCode, query, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/payment-methods`,
query,
...params
});
}
list(query, params) {
return this._client.get({
path: "/v0.1/checkouts",
query,
...params
});
}
create(body, params) {
return this._client.post({
path: "/v0.1/checkouts",
body,
...params
});
}
get(id, params) {
return this._client.get({
path: `/v0.1/checkouts/${id}`,
...params
});
}
process(id, body, params) {
return this._client.put({
path: `/v0.1/checkouts/${id}`,
body,
...params
});
}
deactivate(id, params) {
return this._client.delete({
path: `/v0.1/checkouts/${id}`,
...params
});
}
}
class Customers extends APIResource {
create(body, params) {
return this._client.post({
path: "/v0.1/customers",
body,
...params
});
}
get(customerId, params) {
return this._client.get({
path: `/v0.1/customers/${customerId}`,
...params
});
}
update(customerId, body, params) {
return this._client.put({
path: `/v0.1/customers/${customerId}`,
body,
...params
});
}
listPaymentInstruments(customerId, params) {
return this._client.get({
path: `/v0.1/customers/${customerId}/payment-instruments`,
...params
});
}
deactivatePaymentInstrument(customerId, token, params) {
return this._client.delete({
path: `/v0.1/customers/${customerId}/payment-instruments/${token}`,
...params
});
}
}
class Members extends APIResource {
list(merchantCode, query, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/members`,
query,
...params
});
}
create(merchantCode, body, params) {
return this._client.post({
path: `/v0.1/merchants/${merchantCode}/members`,
body,
...params
});
}
get(merchantCode, memberId, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/members/${memberId}`,
...params
});
}
update(merchantCode, memberId, body, params) {
return this._client.put({
path: `/v0.1/merchants/${merchantCode}/members/${memberId}`,
body,
...params
});
}
delete(merchantCode, memberId, params) {
return this._client.delete({
path: `/v0.1/merchants/${merchantCode}/members/${memberId}`,
...params
});
}
}
class Memberships extends APIResource {
list(query, params) {
return this._client.get({
path: "/v0.1/memberships",
query,
...params
});
}
}
class Merchant extends APIResource {
get(query, params) {
return this._client.get({
path: "/v0.1/me",
query,
...params
});
}
getPersonalProfile(params) {
return this._client.get({
path: "/v0.1/me/personal-profile",
...params
});
}
getMerchantProfile(params) {
return this._client.get({
path: "/v0.1/me/merchant-profile",
...params
});
}
getDoingBusinessAs(params) {
return this._client.get({
path: "/v0.1/me/merchant-profile/doing-business-as",
...params
});
}
listBankAccounts(merchantCode, query, params) {
return this._client.get({
path: `/v1.1/merchants/${merchantCode}/bank-accounts`,
query,
...params
});
}
listBankAccountsDeprecated(query, params) {
return this._client.get({
path: "/v0.1/me/merchant-profile/bank-accounts",
query,
...params
});
}
getSettings(params) {
return this._client.get({
path: "/v0.1/me/merchant-profile/settings",
...params
});
}
}
class Payouts extends APIResource {
list(merchantCode, query, params) {
return this._client.get({
path: `/v1.0/merchants/${merchantCode}/payouts`,
query,
...params
});
}
listDeprecated(query, params) {
return this._client.get({
path: "/v0.1/me/financials/payouts",
query,
...params
});
}
}
class Readers extends APIResource {
createCheckout(merchantCode, id, body, params) {
return this._client.post({
path: `/v0.1/merchants/${merchantCode}/readers/${id}/checkout`,
body,
...params
});
}
terminateCheckout(merchantCode, id, params) {
return this._client.post({
path: `/v0.1/merchants/${merchantCode}/readers/${id}/terminate`,
...params
});
}
list(merchantCode, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/readers`,
...params
});
}
create(merchantCode, body, params) {
return this._client.post({
path: `/v0.1/merchants/${merchantCode}/readers`,
body,
...params
});
}
get(merchantCode, id, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/readers/${id}`,
...params
});
}
deleteReader(merchantCode, id, params) {
return this._client.delete({
path: `/v0.1/merchants/${merchantCode}/readers/${id}`,
...params
});
}
update(merchantCode, id, body, params) {
return this._client.patch({
path: `/v0.1/merchants/${merchantCode}/readers/${id}`,
body,
...params
});
}
}
class Receipts extends APIResource {
get(id, query, params) {
return this._client.get({
path: `/v1.1/receipts/${id}`,
query,
...params
});
}
}
class Roles extends APIResource {
list(merchantCode, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/roles`,
...params
});
}
create(merchantCode, body, params) {
return this._client.post({
path: `/v0.1/merchants/${merchantCode}/roles`,
body,
...params
});
}
get(merchantCode, roleId, params) {
return this._client.get({
path: `/v0.1/merchants/${merchantCode}/roles/${roleId}`,
...params
});
}
delete(merchantCode, roleId, params) {
return this._client.delete({
path: `/v0.1/merchants/${merchantCode}/roles/${roleId}`,
...params
});
}
update(merchantCode, roleId, body, params) {
return this._client.patch({
path: `/v0.1/merchants/${merchantCode}/roles/${roleId}`,
body,
...params
});
}
}
class Subaccounts extends APIResource {
listSubAccounts(query, params) {
return this._client.get({
path: "/v0.1/me/accounts",
query,
...params
});
}
createSubAccount(body, params) {
return this._client.post({
path: "/v0.1/me/accounts",
body,
...params
});
}
compatGetOperator(operatorId, params) {
return this._client.get({
path: `/v0.1/me/accounts/${operatorId}`,
...params
});
}
updateSubAccount(operatorId, body, params) {
return this._client.put({
path: `/v0.1/me/accounts/${operatorId}`,
body,
...params
});
}
deactivateSubAccount(operatorId, params) {
return this._client.delete({
path: `/v0.1/me/accounts/${operatorId}`,
...params
});
}
}
class Transactions extends APIResource {
refund(txnId, body, params) {
return this._client.post({
path: `/v0.1/me/refund/${txnId}`,
body,
...params
});
}
get(merchantCode, query, params) {
return this._client.get({
path: `/v2.1/merchants/${merchantCode}/transactions`,
query,
...params
});
}
getDeprecated(query, params) {
return this._client.get({
path: "/v0.1/me/transactions",
query,
...params
});
}
list(merchantCode, query, params) {
return this._client.get({
path: `/v2.1/merchants/${merchantCode}/transactions/history`,
query,
...params
});
}
listDeprecated(query, params) {
return this._client.get({
path: "/v0.1/me/transactions/history",
query,
...params
});
}
}
class SumUp extends HTTPClient {
checkouts = new Checkouts(this);
customers = new Customers(this);
members = new Members(this);
memberships = new Memberships(this);
merchant = new Merchant(this);
payouts = new Payouts(this);
readers = new Readers(this);
receipts = new Receipts(this);
roles = new Roles(this);
subaccounts = new Subaccounts(this);
transactions = new Transactions(this);
static SumUp = this;
}
SumUp.Checkouts = Checkouts;
SumUp.Customers = Customers;
SumUp.Members = Members;
SumUp.Memberships = Memberships;
SumUp.Merchant = Merchant;
SumUp.Payouts = Payouts;
SumUp.Readers = Readers;
SumUp.Receipts = Receipts;
SumUp.Roles = Roles;
SumUp.Subaccounts = Subaccounts;
SumUp.Transactions = Transactions;
const src = SumUp;
export { SumUp, src as default };
//# sourceMappingURL=index.js.map