@pickn/sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +114 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# @pickn/sdk
|
|
2
|
+
|
|
3
|
+
SDK officiel pour l'API Pickn - Paiements et livraisons
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @pickn/sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
const PicknSDK = require('@pickn/sdk');
|
|
15
|
+
|
|
16
|
+
const pickn = new PicknSDK('pk_test_...');
|
|
17
|
+
|
|
18
|
+
// Créer un paiement
|
|
19
|
+
const payment = await pickn.payments.create({
|
|
20
|
+
amount: 5000, // en centimes (50.00€)
|
|
21
|
+
currency: 'EUR',
|
|
22
|
+
customer_id: 'cus_abc123',
|
|
23
|
+
description: 'Achat produit'
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
console.log(payment.status); // 'succeeded'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Documentation
|
|
30
|
+
|
|
31
|
+
Consultez la documentation complète sur [pickn.fr/developers](https://pickn.fr/developers)
|
|
32
|
+
|
|
33
|
+
## Support
|
|
34
|
+
|
|
35
|
+
- Documentation : https://pickn.fr/developers
|
|
36
|
+
- API Reference : https://pickn.fr/api-docs
|
|
37
|
+
- Support : dev@pickn.fr
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export interface PicknConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
environment?: 'test' | 'production';
|
|
4
|
+
baseURL?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PaymentData {
|
|
7
|
+
amount: number;
|
|
8
|
+
currency: string;
|
|
9
|
+
customer_id?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
metadata?: Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
export interface DeliveryData {
|
|
14
|
+
order_id: string;
|
|
15
|
+
pickup_address: string;
|
|
16
|
+
delivery_address: string;
|
|
17
|
+
package_details: {
|
|
18
|
+
weight_kg: number;
|
|
19
|
+
size: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
recipient: {
|
|
23
|
+
name: string;
|
|
24
|
+
phone: string;
|
|
25
|
+
email?: string;
|
|
26
|
+
};
|
|
27
|
+
delivery_type: 'standard' | 'express';
|
|
28
|
+
}
|
|
29
|
+
declare class PicknSDK {
|
|
30
|
+
private client;
|
|
31
|
+
private apiKey;
|
|
32
|
+
constructor(apiKey?: string);
|
|
33
|
+
config({ apiKey, environment, baseURL }: PicknConfig): void;
|
|
34
|
+
get payments(): {
|
|
35
|
+
create: (data: PaymentData) => Promise<any>;
|
|
36
|
+
retrieve: (paymentId: string) => Promise<any>;
|
|
37
|
+
};
|
|
38
|
+
get deliveries(): {
|
|
39
|
+
create: (data: DeliveryData) => Promise<any>;
|
|
40
|
+
retrieve: (deliveryId: string) => Promise<any>;
|
|
41
|
+
cancel: (deliveryId: string, reason: {
|
|
42
|
+
reason: string;
|
|
43
|
+
}) => Promise<any>;
|
|
44
|
+
};
|
|
45
|
+
get refunds(): {
|
|
46
|
+
create: (data: {
|
|
47
|
+
payment_id: string;
|
|
48
|
+
amount: number;
|
|
49
|
+
reason: string;
|
|
50
|
+
}) => Promise<any>;
|
|
51
|
+
};
|
|
52
|
+
get webhooks(): {
|
|
53
|
+
verify: (body: string, signature: string, secret: string) => any;
|
|
54
|
+
};
|
|
55
|
+
get errors(): {
|
|
56
|
+
CardError: {
|
|
57
|
+
new (message: string): {
|
|
58
|
+
type: string;
|
|
59
|
+
name: string;
|
|
60
|
+
message: string;
|
|
61
|
+
stack?: string;
|
|
62
|
+
};
|
|
63
|
+
captureStackTrace(targetObject: object, constructorOpt?: Function): void;
|
|
64
|
+
prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
|
|
65
|
+
stackTraceLimit: number;
|
|
66
|
+
};
|
|
67
|
+
InvalidRequestError: {
|
|
68
|
+
new (message: string): {
|
|
69
|
+
type: string;
|
|
70
|
+
name: string;
|
|
71
|
+
message: string;
|
|
72
|
+
stack?: string;
|
|
73
|
+
};
|
|
74
|
+
captureStackTrace(targetObject: object, constructorOpt?: Function): void;
|
|
75
|
+
prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
|
|
76
|
+
stackTraceLimit: number;
|
|
77
|
+
};
|
|
78
|
+
AuthenticationError: {
|
|
79
|
+
new (message: string): {
|
|
80
|
+
type: string;
|
|
81
|
+
name: string;
|
|
82
|
+
message: string;
|
|
83
|
+
stack?: string;
|
|
84
|
+
};
|
|
85
|
+
captureStackTrace(targetObject: object, constructorOpt?: Function): void;
|
|
86
|
+
prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
|
|
87
|
+
stackTraceLimit: number;
|
|
88
|
+
};
|
|
89
|
+
APIError: {
|
|
90
|
+
new (message: string): {
|
|
91
|
+
type: string;
|
|
92
|
+
name: string;
|
|
93
|
+
message: string;
|
|
94
|
+
stack?: string;
|
|
95
|
+
};
|
|
96
|
+
captureStackTrace(targetObject: object, constructorOpt?: Function): void;
|
|
97
|
+
prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
|
|
98
|
+
stackTraceLimit: number;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export default PicknSDK;
|
|
103
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,aAAa,EAAE,UAAU,GAAG,SAAS,CAAC;CACvC;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,CAAC,EAAE,MAAM;IAoB3B,MAAM,CAAC,EAAE,MAAM,EAAE,WAAoB,EAAE,OAAO,EAAE,EAAE,WAAW;IAU7D,IAAI,QAAQ;uBAEa,WAAW;8BAKJ,MAAM;MAKrC;IAED,IAAI,UAAU;uBAEW,YAAY;+BAKJ,MAAM;6BAKR,MAAM,UAAU;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE;MAKhE;IAED,IAAI,OAAO;uBAEc;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE;MAK9E;IAED,IAAI,QAAQ;uBAEO,MAAM,aAAa,MAAM,UAAU,MAAM;MAM3D;IAED,IAAI,MAAM;;0BAIiB,MAAM;;;;;;;;;;;0BAON,MAAM;;;;;;;;;;;0BAON,MAAM;;;;;;;;;;;0BAON,MAAM;;;;;;;;;;MAMhC;CACF;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const axios_1 = __importDefault(require("axios"));
|
|
7
|
+
class PicknSDK {
|
|
8
|
+
constructor(apiKey) {
|
|
9
|
+
this.apiKey = '';
|
|
10
|
+
if (apiKey) {
|
|
11
|
+
this.apiKey = apiKey;
|
|
12
|
+
}
|
|
13
|
+
this.client = axios_1.default.create({
|
|
14
|
+
baseURL: 'https://api.pickn.fr/v1',
|
|
15
|
+
headers: {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
this.client.interceptors.request.use((config) => {
|
|
20
|
+
if (this.apiKey) {
|
|
21
|
+
config.headers.Authorization = `Bearer ${this.apiKey}`;
|
|
22
|
+
}
|
|
23
|
+
return config;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
config({ apiKey, environment = 'test', baseURL }) {
|
|
27
|
+
this.apiKey = apiKey;
|
|
28
|
+
if (baseURL) {
|
|
29
|
+
this.client.defaults.baseURL = baseURL;
|
|
30
|
+
}
|
|
31
|
+
else if (environment === 'test') {
|
|
32
|
+
this.client.defaults.baseURL = 'https://api-test.pickn.fr/v1';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
get payments() {
|
|
36
|
+
return {
|
|
37
|
+
create: async (data) => {
|
|
38
|
+
const response = await this.client.post('/payments', data);
|
|
39
|
+
return response.data;
|
|
40
|
+
},
|
|
41
|
+
retrieve: async (paymentId) => {
|
|
42
|
+
const response = await this.client.get(`/payments/${paymentId}`);
|
|
43
|
+
return response.data;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
get deliveries() {
|
|
48
|
+
return {
|
|
49
|
+
create: async (data) => {
|
|
50
|
+
const response = await this.client.post('/deliveries', data);
|
|
51
|
+
return response.data;
|
|
52
|
+
},
|
|
53
|
+
retrieve: async (deliveryId) => {
|
|
54
|
+
const response = await this.client.get(`/deliveries/${deliveryId}`);
|
|
55
|
+
return response.data;
|
|
56
|
+
},
|
|
57
|
+
cancel: async (deliveryId, reason) => {
|
|
58
|
+
const response = await this.client.post(`/deliveries/${deliveryId}/cancel`, reason);
|
|
59
|
+
return response.data;
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
get refunds() {
|
|
64
|
+
return {
|
|
65
|
+
create: async (data) => {
|
|
66
|
+
const response = await this.client.post('/refunds', data);
|
|
67
|
+
return response.data;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
get webhooks() {
|
|
72
|
+
return {
|
|
73
|
+
verify: (body, signature, secret) => {
|
|
74
|
+
// Implémentation de la vérification de signature
|
|
75
|
+
// Pour l'instant, retourne les données parsées
|
|
76
|
+
return JSON.parse(body);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
get errors() {
|
|
81
|
+
return {
|
|
82
|
+
CardError: class extends Error {
|
|
83
|
+
constructor(message) {
|
|
84
|
+
super(message);
|
|
85
|
+
this.type = 'card_error';
|
|
86
|
+
this.name = 'CardError';
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
InvalidRequestError: class extends Error {
|
|
90
|
+
constructor(message) {
|
|
91
|
+
super(message);
|
|
92
|
+
this.type = 'invalid_request_error';
|
|
93
|
+
this.name = 'InvalidRequestError';
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
AuthenticationError: class extends Error {
|
|
97
|
+
constructor(message) {
|
|
98
|
+
super(message);
|
|
99
|
+
this.type = 'authentication_error';
|
|
100
|
+
this.name = 'AuthenticationError';
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
APIError: class extends Error {
|
|
104
|
+
constructor(message) {
|
|
105
|
+
super(message);
|
|
106
|
+
this.type = 'api_error';
|
|
107
|
+
this.name = 'APIError';
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.default = PicknSDK;
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pickn/sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "SDK officiel pour l'API Pickn - Paiements et livraisons",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"test": "jest",
|
|
10
|
+
"prepublishOnly": "npm run build",
|
|
11
|
+
"publish:npm": "npm publish --access public"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"pickn",
|
|
15
|
+
"payment",
|
|
16
|
+
"delivery",
|
|
17
|
+
"api",
|
|
18
|
+
"sdk",
|
|
19
|
+
"picknpay"
|
|
20
|
+
],
|
|
21
|
+
"author": "Pickn Technologies <dev@pickn.fr>",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/pickn/sdk"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/pickn/sdk/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://pickn.fr/developers",
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=14.0.0"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist/**/*",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"axios": "^1.6.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^20.0.0",
|
|
44
|
+
"jest": "^29.0.0",
|
|
45
|
+
"typescript": "^5.0.0"
|
|
46
|
+
}
|
|
47
|
+
}
|