Skip to content

Commit

Permalink
created models for strong typings of request data and response
Browse files Browse the repository at this point in the history
  • Loading branch information
toonvanstrijp committed Feb 22, 2019
1 parent 68a20cc commit fb8b2bd
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 39 deletions.
62 changes: 30 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,40 +10,38 @@ npm install tikkie-checkout
```

## Usage
```javascript
```typescript
import {TikkieCheckoutClient, TikkieCheckoutConfig} from 'tikkie-checkout';

(async () => {
const config = new TikkieCheckoutConfig('apiKey', 'merchantToken');
config.loadPrivateKey('path_to_key', 'RS256');

const tikkie = new TikkieCheckoutClient(config);

try {

const createOrderRequest = await tikkie.createOrder({
referenceId: "some reference",
shippingCostsInCents: 690,
discountInCents: 500,
currency: "EUR",
expiration: 1800,
redirectUrl: "https://www.yourdomain.nl/finishorder/1234",
notificationUrl: "https://www.yourdomain.nl/1234",
items: [
{
itemName: "Mobile Phone",
priceInCents: 50000,
quantity: 1
}]
});
console.log(createOrderRequest);

const getOrderRequest = await tikkie.getOrder(createOrderRequest.orderToken);
console.log(getOrderRequest);
} catch (err) {
console.error(err);
}
})();
const config = new TikkieCheckoutConfig('apiKey', 'merchantToken');
config.loadPrivateKey('path_to_key', 'RS256');

const tikkie = new TikkieCheckoutClient(config);

try {

const createOrderRequest = await tikkie.createOrder({
referenceId: "some reference",
shippingCostsInCents: 690,
discountInCents: 500,
currency: "EUR",
expiration: 1800,
redirectUrl: "https://www.yourdomain.nl/finishorder/1234",
notificationUrl: "https://www.yourdomain.nl/1234",
items: [
{
itemName: "Mobile Phone",
priceInCents: 50000,
quantity: 1
}]
});
console.log(createOrderRequest);

const getOrderRequest = await tikkie.getOrder(createOrderRequest.orderToken);
console.log(getOrderRequest);
} catch (err) {
console.error(err);
}
```

## Inspiration
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "tikkie-checkout",
"description": "TypeScript implementation of the Tikkie Fast Checkout API.",
"version": "1.0.3",
"version": "1.0.4",
"license": "MIT",
"author": "Toon van Strijp <[email protected]> (https://www.toonvanstrijp.com)",
"repository": "github:ToonvanStrijp/node-tikkie-checkout",
Expand Down
9 changes: 6 additions & 3 deletions src/client.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@

import {TikkieCheckoutConfig} from './config';
import { CreatedOrder } from './models/createdOrder';
import { Order } from './models/order';
import { CreateOrder } from './models/createOrder';

export class TikkieCheckoutClient {
config: TikkieCheckoutConfig;
Expand All @@ -17,14 +20,14 @@ export class TikkieCheckoutClient {
* Manually authenticate with the Tikkie API.
* TikkieCheckoutClient will automatically connect before making the first request.
*/
authenticate = async (): Promise<void> => {
async authenticate(): Promise<void> {
try {
await this.config.getAccessToken();
} catch (err) {
throw err;
}
}

createOrder = (data: object) => this.config.postRequest('/v1/tikkie/fastcheckout/orders', data);
getOrder = (orderToken: string) => this.config.getRequest(`/v1/tikkie/fastcheckout/orders/${orderToken}`);
createOrder(data: CreateOrder) { return this.config.postRequest<CreatedOrder>('/v1/tikkie/fastcheckout/orders', data); }
getOrder(orderToken: string) { return this.config.getRequest<Order>(`/v1/tikkie/fastcheckout/orders/${orderToken}`); }
}
6 changes: 3 additions & 3 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export class TikkieCheckoutConfig {
return this.accessToken.token;
}

async request(method: 'GET' | 'POST', endpoint: string, data: object | null = null): Promise<object> {
async request<T>(method: 'GET' | 'POST', endpoint: string, data: object | null = null): Promise<T> {
try {
let token: string;
try {
Expand Down Expand Up @@ -125,6 +125,6 @@ export class TikkieCheckoutConfig {
}
}

getRequest(endpoint: string, query: object = {}): Promise<object> { return this.request('GET', endpoint, query); }
postRequest(endpoint: string, data: object = {}): Promise<object> { return this.request('POST', endpoint, data); }
getRequest<T>(endpoint: string, query: object = {}): Promise<T> { return this.request('GET', endpoint, query); }
postRequest<T>(endpoint: string, data: object = {}): Promise<T> { return this.request<T>('POST', endpoint, data); }
}
15 changes: 15 additions & 0 deletions src/models/createOrder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export interface CreateOrder {
referenceId: string;
shippingCostsInCents: number;
discountInCents?: number;
currency: 'EUR';
expiration: number;
redirectUrl: string;
notificationUrl?: string;

items: Array<{
itemName: string;
priceInCents: number;
quantity: number;
}>;
}
4 changes: 4 additions & 0 deletions src/models/createdOrder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export interface CreatedOrder {
checkoutUrl: string;
orderToken: string;
}
30 changes: 30 additions & 0 deletions src/models/order.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
export interface Order {
orderToken: string;
referenceId: string;
shippingCostsInCents: number;
discountInCents?: number;
currency: string;
items: Array<{
itemName: string;
priceInCents: number;
quantity: number;
}>;

status: 'NEW' | 'PAID' | 'CANCELLED' | 'EXPIRED' | 'ERROR';

payer: {
companyName?: string;
firstName: string;
lastName: string;
email: string;
phoneNumber?: string;
shippingAddress: {
street: string;
houseNumber: string;
addition?: string;
postalCode: string;
city: string;
country: string;
};
};
}

0 comments on commit fb8b2bd

Please sign in to comment.