-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathcreateMollieClient.ts
168 lines (143 loc) · 8.29 KB
/
createMollieClient.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
// Lib
import { version as libraryVersion } from '../package.json';
import caCertificates from './cacert.pem';
import NetworkClient from './communication/NetworkClient';
import TransformingNetworkClient, { Transformers } from './communication/TransformingNetworkClient';
import Options from './Options';
import buildFromEntries from './plumbing/buildFromEntries';
// Transformers
import { transform as transformPayment } from './data/payments/Payment';
import { transform as transformMethod } from './data/methods/Method';
import { transform as transformRefund } from './data/refunds/Refund';
import { transform as transformChargeback } from './data/chargebacks/Chargeback';
import { transform as transformCapture } from './data/payments/captures/Capture';
import { transform as transformCustomer } from './data/customers/Customer';
import { transform as transformMandate } from './data/customers/mandates/Mandate';
import { transform as transformSubscription } from './data/subscription/Subscription';
import { transform as transformOrder } from './data/orders/Order';
import { transform as transformShipment } from './data/orders/shipments/Shipment';
import { transform as transformPermission } from './data/permissions/Permission';
import { transform as transformOrganization } from './data/organizations/Organizations';
import { transform as transformProfile } from './data/profiles/Profile';
import { transform as transformOnboarding } from './data/onboarding/Onboarding';
import { transform as transformPaymentLink } from './data/paymentLink/PaymentLink';
// Binders
import ApplePayBinder from './binders/applePay/ApplePayBinder';
import ChargebacksBinder from './binders/chargebacks/ChargebacksBinder';
import CustomerMandatesBinder from './binders/customers/mandates/CustomerMandatesBinder';
import CustomerPaymentsBinder from './binders/customers/payments/CustomerPaymentsBinder';
import CustomersBinder from './binders/customers/CustomersBinder';
import CustomerSubscriptionsBinder from './binders/customers/subscriptions/CustomerSubscriptionsBinder';
import MethodsBinder from './binders/methods/MethodsBinder';
import OnboardingBinder from './binders/onboarding/OnboardingBinder';
import OrderLinesBinder from './binders/orders/orderlines/OrderLinesBinder';
import OrderPaymentsBinder from './binders/payments/orders/OrderPaymentsBinder';
import OrderRefundsBinder from './binders/refunds/orders/OrderRefundsBinder';
import OrdersBinder from './binders/orders/OrdersBinder';
import OrderShipmentsBinder from './binders/orders/shipments/OrderShipmentsBinder';
import OrganizationsBinder from './binders/organizations/OrganizationsBinder';
import PaymentCapturesBinder from './binders/payments/captures/PaymentCapturesBinder';
import PaymentChargebacksBinder from './binders/payments/chargebacks/PaymentChargebacksBinder';
import PaymentLinksBinder from './binders/paymentLinks/PaymentLinksBinder';
import PaymentRefundsBinder from './binders/payments/refunds/PaymentRefundsBinder';
import PaymentsBinder from './binders/payments/PaymentsBinder';
import PermissionsBinder from './binders/permissions/PermissionBinder';
import ProfilesBinder from './binders/profiles/ProfilesBinder';
import RefundsBinder from './binders/refunds/RefundsBinder';
import SubscriptionsBinder from './binders/subscriptions/SubscriptionsBinder';
import SubscriptionPaymentsBinder from './binders/subscriptions/payments/SubscriptionPaymentsBinder';
/**
* Returns an object which has a property for each passed key, which share the same (passed) value.
*/
function alias<T, K extends string>(value: T, ...keys: K[]) {
return buildFromEntries(keys.map(name => [name, value])) as { [P in K]: T };
}
/**
* Create Mollie client.
* @since 2.0.0
*/
export default function createMollieClient(options: Options) {
// Attempt to catch cases where this library is integrated into a frontend app.
if (['node', 'io.js'].includes(process?.release?.name) == false) {
throw new Error(
`Unexpected process release name ${process?.release?.name}. This may indicate that the Mollie API client is integrated into a website or app. This is not recommended, please see https://github.com/mollie/mollie-api-node/#a-note-on-use-outside-of-nodejs. If this is a mistake, please let us know: https://github.com/mollie/mollie-api-node/issues`,
);
}
if (!options.apiKey && !options.accessToken) {
throw new TypeError('Missing parameter "apiKey" or "accessToken".');
}
const networkClient = new NetworkClient(Object.assign({}, options, { libraryVersion, nodeVersion: process.version, caCertificates }));
const transformingNetworkClient = new TransformingNetworkClient(
networkClient,
new Transformers()
.add('payment', transformPayment)
.add('method', transformMethod)
.add('refund', transformRefund)
.add('chargeback', transformChargeback)
.add('capture', transformCapture)
.add('customer', transformCustomer)
.add('mandate', transformMandate)
.add('subscription', transformSubscription)
.add('order', transformOrder)
.add('shipment', transformShipment)
.add('permission', transformPermission)
.add('organization', transformOrganization)
.add('profile', transformProfile)
.add('onboarding', transformOnboarding)
.add('payment-link', transformPaymentLink),
);
return {
// Payments.
payments: new PaymentsBinder(transformingNetworkClient),
// Methods.
methods: new MethodsBinder(transformingNetworkClient),
// Refunds.
refunds: new RefundsBinder(transformingNetworkClient),
...alias(new PaymentRefundsBinder(transformingNetworkClient), 'paymentRefunds', 'payments_refunds'),
// Chargebacks.
chargebacks: new ChargebacksBinder(transformingNetworkClient),
...alias(new PaymentChargebacksBinder(transformingNetworkClient), 'paymentChargebacks', 'payments_chargebacks'),
// Captures.
...alias(new PaymentCapturesBinder(transformingNetworkClient), 'paymentCaptures', 'payments_captures'),
// Customers.
customers: new CustomersBinder(transformingNetworkClient),
...alias(new CustomerPaymentsBinder(transformingNetworkClient), 'customerPayments', 'customers_payments'),
// Mandates.
...alias(new CustomerMandatesBinder(transformingNetworkClient), 'customerMandates', 'customers_mandates'),
// Subscriptions.
subscription: new SubscriptionsBinder(transformingNetworkClient),
...alias(new SubscriptionPaymentsBinder(transformingNetworkClient), 'subscriptionPayments', 'subscriptions_payments'),
...alias(new CustomerSubscriptionsBinder(transformingNetworkClient), 'customerSubscriptions', 'customers_subscriptions'),
// Orders.
orders: new OrdersBinder(transformingNetworkClient),
...alias(new OrderRefundsBinder(transformingNetworkClient), 'orderRefunds', 'orders_refunds'),
...alias(new OrderLinesBinder(transformingNetworkClient), 'orderLines', 'orders_lines'),
...alias(new OrderPaymentsBinder(transformingNetworkClient), 'orderPayments', 'orders_payments'),
// Shipments.
...alias(new OrderShipmentsBinder(transformingNetworkClient), 'orderShipments', 'orders_shipments'),
// Permissions.
permissions: new PermissionsBinder(transformingNetworkClient),
// Organizations.
organizations: new OrganizationsBinder(transformingNetworkClient),
// Profiles.
profiles: new ProfilesBinder(transformingNetworkClient),
// Onboarding.
onboarding: new OnboardingBinder(transformingNetworkClient),
// Apple Pay.
applePay: new ApplePayBinder(networkClient),
// Payment links.
paymentLinks: new PaymentLinksBinder(transformingNetworkClient),
};
}
export { createMollieClient };
export { ApiMode, Locale, PaymentMethod, HistoricPaymentMethod, SequenceType } from './data/global';
export { CaptureEmbed } from './data/payments/captures/data';
export { MandateMethod, MandateStatus } from './data/customers/mandates/data';
export { MethodImageSize, MethodInclude } from './data/methods/data';
export { OrderEmbed, OrderStatus } from './data/orders/data';
export { OrderLineType } from './data/orders/orderlines/OrderLine';
export { PaymentEmbed, PaymentStatus } from './data/payments/data';
export { RefundEmbed, RefundStatus } from './data/refunds/data';
export { SubscriptionStatus } from './data/subscription/data';
export { ProfileStatus } from './data/profiles/data';
export { OnboardingStatus } from './data/onboarding/data';