Skip to content

Commit fb8b2bd

Browse files
committed
created models for strong typings of request data and response
1 parent 68a20cc commit fb8b2bd

File tree

7 files changed

+89
-39
lines changed

7 files changed

+89
-39
lines changed

README.md

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,38 @@ npm install tikkie-checkout
1010
```
1111

1212
## Usage
13-
```javascript
13+
```typescript
1414
import {TikkieCheckoutClient, TikkieCheckoutConfig} from 'tikkie-checkout';
1515

16-
(async () => {
17-
const config = new TikkieCheckoutConfig('apiKey', 'merchantToken');
18-
config.loadPrivateKey('path_to_key', 'RS256');
19-
20-
const tikkie = new TikkieCheckoutClient(config);
21-
22-
try {
23-
24-
const createOrderRequest = await tikkie.createOrder({
25-
referenceId: "some reference",
26-
shippingCostsInCents: 690,
27-
discountInCents: 500,
28-
currency: "EUR",
29-
expiration: 1800,
30-
redirectUrl: "https://www.yourdomain.nl/finishorder/1234",
31-
notificationUrl: "https://www.yourdomain.nl/1234",
32-
items: [
33-
{
34-
itemName: "Mobile Phone",
35-
priceInCents: 50000,
36-
quantity: 1
37-
}]
38-
});
39-
console.log(createOrderRequest);
40-
41-
const getOrderRequest = await tikkie.getOrder(createOrderRequest.orderToken);
42-
console.log(getOrderRequest);
43-
} catch (err) {
44-
console.error(err);
45-
}
46-
})();
16+
const config = new TikkieCheckoutConfig('apiKey', 'merchantToken');
17+
config.loadPrivateKey('path_to_key', 'RS256');
18+
19+
const tikkie = new TikkieCheckoutClient(config);
20+
21+
try {
22+
23+
const createOrderRequest = await tikkie.createOrder({
24+
referenceId: "some reference",
25+
shippingCostsInCents: 690,
26+
discountInCents: 500,
27+
currency: "EUR",
28+
expiration: 1800,
29+
redirectUrl: "https://www.yourdomain.nl/finishorder/1234",
30+
notificationUrl: "https://www.yourdomain.nl/1234",
31+
items: [
32+
{
33+
itemName: "Mobile Phone",
34+
priceInCents: 50000,
35+
quantity: 1
36+
}]
37+
});
38+
console.log(createOrderRequest);
39+
40+
const getOrderRequest = await tikkie.getOrder(createOrderRequest.orderToken);
41+
console.log(getOrderRequest);
42+
} catch (err) {
43+
console.error(err);
44+
}
4745
```
4846

4947
## Inspiration

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "tikkie-checkout",
33
"description": "TypeScript implementation of the Tikkie Fast Checkout API.",
4-
"version": "1.0.3",
4+
"version": "1.0.4",
55
"license": "MIT",
66
"author": "Toon van Strijp <toonvanstrijp@gmail.com> (https://www.toonvanstrijp.com)",
77
"repository": "github:ToonvanStrijp/node-tikkie-checkout",

src/client.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11

22
import {TikkieCheckoutConfig} from './config';
3+
import { CreatedOrder } from './models/createdOrder';
4+
import { Order } from './models/order';
5+
import { CreateOrder } from './models/createOrder';
36

47
export class TikkieCheckoutClient {
58
config: TikkieCheckoutConfig;
@@ -17,14 +20,14 @@ export class TikkieCheckoutClient {
1720
* Manually authenticate with the Tikkie API.
1821
* TikkieCheckoutClient will automatically connect before making the first request.
1922
*/
20-
authenticate = async (): Promise<void> => {
23+
async authenticate(): Promise<void> {
2124
try {
2225
await this.config.getAccessToken();
2326
} catch (err) {
2427
throw err;
2528
}
2629
}
2730

28-
createOrder = (data: object) => this.config.postRequest('/v1/tikkie/fastcheckout/orders', data);
29-
getOrder = (orderToken: string) => this.config.getRequest(`/v1/tikkie/fastcheckout/orders/${orderToken}`);
31+
createOrder(data: CreateOrder) { return this.config.postRequest<CreatedOrder>('/v1/tikkie/fastcheckout/orders', data); }
32+
getOrder(orderToken: string) { return this.config.getRequest<Order>(`/v1/tikkie/fastcheckout/orders/${orderToken}`); }
3033
}

src/config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class TikkieCheckoutConfig {
8888
return this.accessToken.token;
8989
}
9090

91-
async request(method: 'GET' | 'POST', endpoint: string, data: object | null = null): Promise<object> {
91+
async request<T>(method: 'GET' | 'POST', endpoint: string, data: object | null = null): Promise<T> {
9292
try {
9393
let token: string;
9494
try {
@@ -125,6 +125,6 @@ export class TikkieCheckoutConfig {
125125
}
126126
}
127127

128-
getRequest(endpoint: string, query: object = {}): Promise<object> { return this.request('GET', endpoint, query); }
129-
postRequest(endpoint: string, data: object = {}): Promise<object> { return this.request('POST', endpoint, data); }
128+
getRequest<T>(endpoint: string, query: object = {}): Promise<T> { return this.request('GET', endpoint, query); }
129+
postRequest<T>(endpoint: string, data: object = {}): Promise<T> { return this.request<T>('POST', endpoint, data); }
130130
}

src/models/createOrder.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export interface CreateOrder {
2+
referenceId: string;
3+
shippingCostsInCents: number;
4+
discountInCents?: number;
5+
currency: 'EUR';
6+
expiration: number;
7+
redirectUrl: string;
8+
notificationUrl?: string;
9+
10+
items: Array<{
11+
itemName: string;
12+
priceInCents: number;
13+
quantity: number;
14+
}>;
15+
}

src/models/createdOrder.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface CreatedOrder {
2+
checkoutUrl: string;
3+
orderToken: string;
4+
}

src/models/order.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
export interface Order {
2+
orderToken: string;
3+
referenceId: string;
4+
shippingCostsInCents: number;
5+
discountInCents?: number;
6+
currency: string;
7+
items: Array<{
8+
itemName: string;
9+
priceInCents: number;
10+
quantity: number;
11+
}>;
12+
13+
status: 'NEW' | 'PAID' | 'CANCELLED' | 'EXPIRED' | 'ERROR';
14+
15+
payer: {
16+
companyName?: string;
17+
firstName: string;
18+
lastName: string;
19+
email: string;
20+
phoneNumber?: string;
21+
shippingAddress: {
22+
street: string;
23+
houseNumber: string;
24+
addition?: string;
25+
postalCode: string;
26+
city: string;
27+
country: string;
28+
};
29+
};
30+
}

0 commit comments

Comments
 (0)