@smartsoft001/paypal 2.147.0 → 2.149.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/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@smartsoft001/paypal",
3
- "version": "2.147.0",
3
+ "version": "2.149.0",
4
+ "type": "commonjs",
5
+ "main": "./src/index.js",
6
+ "typings": "./src/index.d.ts",
4
7
  "publishConfig": {
5
8
  "access": "public"
6
9
  },
@@ -14,5 +17,9 @@
14
17
  "bugs": {
15
18
  "url": "https://github.com/emiljuchnikowski/smartsoft/issues"
16
19
  },
17
- "homepage": "https://github.com/emiljuchnikowski/smartsoft#readme"
20
+ "homepage": "https://github.com/emiljuchnikowski/smartsoft#readme",
21
+ "peerDependencies": {
22
+ "@smartsoft001/trans-domain": "2.149.0"
23
+ },
24
+ "types": "./src/index.d.ts"
18
25
  }
package/src/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/paypal.config"), exports);
5
+ tslib_1.__exportStar(require("./lib/paypal.service"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/shared/paypal/src/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC;AACpC,+DAAqC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IPaypalConfigProvider = exports.PAYPAL_CONFIG_PROVIDER = exports.PaypalConfig = void 0;
4
+ class PaypalConfig {
5
+ clientId;
6
+ clientSecret;
7
+ currencyCode;
8
+ returnUrl;
9
+ apiUrl;
10
+ cancelUrl;
11
+ test;
12
+ constructor(clientId, clientSecret, currencyCode, returnUrl, apiUrl, cancelUrl, test) {
13
+ this.clientId = clientId;
14
+ this.clientSecret = clientSecret;
15
+ this.currencyCode = currencyCode;
16
+ this.returnUrl = returnUrl;
17
+ this.apiUrl = apiUrl;
18
+ this.cancelUrl = cancelUrl;
19
+ this.test = test;
20
+ }
21
+ }
22
+ exports.PaypalConfig = PaypalConfig;
23
+ exports.PAYPAL_CONFIG_PROVIDER = 'PAYPAL_CONFIG_PROVIDER';
24
+ class IPaypalConfigProvider {
25
+ }
26
+ exports.IPaypalConfigProvider = IPaypalConfigProvider;
27
+ //# sourceMappingURL=paypal.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paypal.config.js","sourceRoot":"","sources":["../../../../../../packages/shared/paypal/src/lib/paypal.config.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IAEd;IACA;IACA;IACA;IACA;IACA;IACA;IAPT,YACS,QAAgB,EAChB,YAAoB,EACpB,YAAoB,EACpB,SAAiB,EACjB,MAAc,EACd,SAAiB,EACjB,IAAc;QANd,aAAQ,GAAR,QAAQ,CAAQ;QAChB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,cAAS,GAAT,SAAS,CAAQ;QACjB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;QACjB,SAAI,GAAJ,IAAI,CAAU;IACpB,CAAC;CACL;AAVD,oCAUC;AAEY,QAAA,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D,MAAsB,qBAAqB;CAE1C;AAFD,sDAEC"}
@@ -1,12 +1,10 @@
1
- import { HttpService } from '@nestjs/axios';
2
1
  import { ModuleRef } from '@nestjs/core';
3
2
  import { ITransPaymentSingleService, Trans, TransStatus } from '@smartsoft001/trans-domain';
4
3
  import { PaypalConfig } from './paypal.config';
5
4
  export declare class PaypalService implements ITransPaymentSingleService {
6
- private readonly httpService;
7
5
  private config;
8
6
  private moduleRef;
9
- constructor(httpService: HttpService, config: PaypalConfig, moduleRef: ModuleRef);
7
+ constructor(config: PaypalConfig, moduleRef: ModuleRef);
10
8
  create(obj: {
11
9
  id: string;
12
10
  name: string;
@@ -17,6 +15,7 @@ export declare class PaypalService implements ITransPaymentSingleService {
17
15
  contactPhone?: string;
18
16
  clientIp: string;
19
17
  data: any;
18
+ options?: any;
20
19
  }): Promise<{
21
20
  orderId: string;
22
21
  redirectUrl: string;
@@ -31,6 +30,5 @@ export declare class PaypalService implements ITransPaymentSingleService {
31
30
  private getStatusFromExternal;
32
31
  private getConfig;
33
32
  private getEnv;
34
- private getApiUrl;
35
33
  private getTransactionId;
36
34
  }
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var PaypalService_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PaypalService = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const core_1 = require("@nestjs/core");
8
+ const paypal = tslib_1.__importStar(require("paypal-rest-sdk"));
9
+ const paypal_config_1 = require("./paypal.config");
10
+ let PaypalService = PaypalService_1 = class PaypalService {
11
+ config;
12
+ moduleRef;
13
+ constructor(config, moduleRef) {
14
+ this.config = config;
15
+ this.moduleRef = moduleRef;
16
+ }
17
+ async create(obj) {
18
+ const config = await this.getConfig(obj.data);
19
+ const data = {
20
+ intent: 'sale',
21
+ payer: {
22
+ payment_method: 'paypal',
23
+ },
24
+ redirect_urls: {
25
+ return_url: config.apiUrl + 'paypal/' + obj.id + '/confirm',
26
+ cancel_url: config.cancelUrl,
27
+ },
28
+ transactions: [
29
+ {
30
+ item_list: {
31
+ items: [
32
+ {
33
+ name: obj.name,
34
+ sku: obj.id,
35
+ price: obj.amount / 100,
36
+ currency: config.currencyCode,
37
+ quantity: 1,
38
+ },
39
+ ],
40
+ },
41
+ amount: {
42
+ currency: config.currencyCode,
43
+ total: obj.amount / 100,
44
+ },
45
+ description: obj.name,
46
+ },
47
+ ],
48
+ };
49
+ const result = await new Promise((res, rej) => {
50
+ paypal.payment.create(data, this.getEnv(config), (error, payment) => {
51
+ if (error) {
52
+ rej(error);
53
+ }
54
+ else {
55
+ res(payment);
56
+ }
57
+ });
58
+ });
59
+ return {
60
+ redirectUrl: result.links.find((l) => l.rel === 'approval_url').href,
61
+ orderId: result.id,
62
+ };
63
+ }
64
+ async confirm(payerId, paymentId, amount, externalData) {
65
+ const config = await this.getConfig(externalData);
66
+ const data = {
67
+ payer_id: payerId,
68
+ transactions: [
69
+ {
70
+ amount: {
71
+ currency: config.currencyCode,
72
+ total: amount,
73
+ },
74
+ },
75
+ ],
76
+ };
77
+ return await new Promise((res, rej) => {
78
+ paypal.payment.execute(paymentId, data, this.getEnv(config), (error, payment) => {
79
+ if (error) {
80
+ rej(error);
81
+ }
82
+ else {
83
+ res(payment);
84
+ }
85
+ });
86
+ });
87
+ }
88
+ async getStatus(trans) {
89
+ const orderId = this.getOrderId(trans) ?? '';
90
+ const config = await this.getConfig(trans.data);
91
+ const payment = await new Promise((res, rej) => {
92
+ paypal.payment.get(orderId, this.getEnv(config), (error, result) => {
93
+ if (error) {
94
+ rej(error);
95
+ }
96
+ else {
97
+ res(result);
98
+ }
99
+ });
100
+ });
101
+ return {
102
+ status: this.getStatusFromExternal(payment.state),
103
+ data: payment,
104
+ };
105
+ }
106
+ async refund(trans, comment) {
107
+ const orderId = this.getOrderId(trans);
108
+ const config = await this.getConfig(trans.data);
109
+ const transactionId = this.getTransactionId(trans);
110
+ if (!transactionId) {
111
+ throw new Error('Paypal transaction ID not found for refund');
112
+ }
113
+ const refundData = {
114
+ amount: {
115
+ total: (trans.amount / 100).toString(),
116
+ currency: config.currencyCode,
117
+ },
118
+ description: comment,
119
+ };
120
+ return new Promise((resolve, reject) => {
121
+ paypal.sale.refund(transactionId, refundData, this.getEnv(config), (error, refund) => {
122
+ if (error) {
123
+ reject(error);
124
+ }
125
+ else {
126
+ resolve(refund);
127
+ }
128
+ });
129
+ });
130
+ }
131
+ getOrderId(trans) {
132
+ const historyItem = trans.history.find((x) => x.status === 'started');
133
+ if (!historyItem) {
134
+ console.warn('Transaction without start status');
135
+ return null;
136
+ }
137
+ return historyItem.data.orderId;
138
+ }
139
+ getStatusFromExternal(status) {
140
+ status = status.toUpperCase();
141
+ switch (status) {
142
+ case 'COMPLETED':
143
+ return 'completed';
144
+ case 'VOIDED':
145
+ return 'canceled';
146
+ case 'CREATED':
147
+ return 'pending';
148
+ case 'SAVED':
149
+ return 'pending';
150
+ case 'APPROVED':
151
+ return 'completed';
152
+ default:
153
+ return status;
154
+ }
155
+ }
156
+ async getConfig(data) {
157
+ try {
158
+ const provider = this.moduleRef.get(paypal_config_1.PAYPAL_CONFIG_PROVIDER, { strict: false });
159
+ return await provider.get(data);
160
+ }
161
+ catch (e) {
162
+ common_1.Logger.warn('PayPal config provider not found', PaypalService_1.name);
163
+ }
164
+ return this.config;
165
+ }
166
+ getEnv(config) {
167
+ return {
168
+ mode: config.test ? 'sandbox' : 'live',
169
+ client_id: config.clientId,
170
+ client_secret: config.clientSecret,
171
+ };
172
+ }
173
+ getTransactionId(trans) {
174
+ const historyItem = trans.history.find((i) => i.status === 'completed' &&
175
+ i.data &&
176
+ i.data.customData &&
177
+ i.data.customData.transactions &&
178
+ i.data.customData.transactions.length &&
179
+ i.data.customData.transactions[0].related_resources &&
180
+ i.data.customData.transactions[0].related_resources.length &&
181
+ i.data.customData.transactions[0].related_resources[0].sale);
182
+ return historyItem
183
+ ? historyItem.data.customData.transactions[0].related_resources[0].sale.id
184
+ : null;
185
+ }
186
+ };
187
+ exports.PaypalService = PaypalService;
188
+ exports.PaypalService = PaypalService = PaypalService_1 = tslib_1.__decorate([
189
+ (0, common_1.Injectable)(),
190
+ tslib_1.__metadata("design:paramtypes", [paypal_config_1.PaypalConfig,
191
+ core_1.ModuleRef])
192
+ ], PaypalService);
193
+ //# sourceMappingURL=paypal.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paypal.service.js","sourceRoot":"","sources":["../../../../../../packages/shared/paypal/src/lib/paypal.service.ts"],"names":[],"mappings":"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"}
package/index.js DELETED
@@ -1,239 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result) __defProp(target, key, result);
9
- return result;
10
- };
11
-
12
- // packages/shared/paypal/src/lib/paypal.config.ts
13
- var PaypalConfig = class {
14
- constructor(clientId, clientSecret, currencyCode, returnUrl, apiUrl, cancelUrl, test) {
15
- this.clientId = clientId;
16
- this.clientSecret = clientSecret;
17
- this.currencyCode = currencyCode;
18
- this.returnUrl = returnUrl;
19
- this.apiUrl = apiUrl;
20
- this.cancelUrl = cancelUrl;
21
- this.test = test;
22
- }
23
- clientId;
24
- clientSecret;
25
- currencyCode;
26
- returnUrl;
27
- apiUrl;
28
- cancelUrl;
29
- test;
30
- };
31
- var PAYPAL_CONFIG_PROVIDER = "PAYPAL_CONFIG_PROVIDER";
32
- var IPaypalConfigProvider = class {
33
- };
34
-
35
- // packages/shared/paypal/src/lib/paypal.service.ts
36
- import { Injectable, Logger } from "@nestjs/common";
37
- import * as paypal from "paypal-rest-sdk";
38
- var PaypalService = class {
39
- constructor(httpService, config, moduleRef) {
40
- this.httpService = httpService;
41
- this.config = config;
42
- this.moduleRef = moduleRef;
43
- }
44
- httpService;
45
- config;
46
- moduleRef;
47
- async create(obj) {
48
- const config = await this.getConfig(obj.data);
49
- const data = {
50
- intent: "sale",
51
- payer: {
52
- payment_method: "paypal"
53
- },
54
- redirect_urls: {
55
- return_url: config.apiUrl + "paypal/" + obj.id + "/confirm",
56
- cancel_url: config.cancelUrl
57
- },
58
- transactions: [
59
- {
60
- item_list: {
61
- items: [
62
- {
63
- name: obj.name,
64
- sku: obj.id,
65
- price: obj.amount / 100,
66
- currency: config.currencyCode,
67
- quantity: 1
68
- }
69
- ]
70
- },
71
- amount: {
72
- currency: config.currencyCode,
73
- total: obj.amount / 100
74
- },
75
- description: obj.name
76
- }
77
- ]
78
- };
79
- const result = await new Promise((res, rej) => {
80
- paypal.payment.create(
81
- data,
82
- this.getEnv(config),
83
- (error, payment2) => {
84
- if (error) {
85
- rej(error);
86
- } else {
87
- res(payment2);
88
- }
89
- }
90
- );
91
- });
92
- return {
93
- redirectUrl: result.links.find(
94
- (l) => l.rel === "approval_url"
95
- ).href,
96
- orderId: result.id
97
- };
98
- }
99
- async confirm(payerId, paymentId, amount, externalData) {
100
- const config = await this.getConfig(externalData);
101
- const data = {
102
- payer_id: payerId,
103
- transactions: [
104
- {
105
- amount: {
106
- currency: config.currencyCode,
107
- total: amount
108
- }
109
- }
110
- ]
111
- };
112
- return await new Promise((res, rej) => {
113
- paypal.payment.execute(
114
- paymentId,
115
- data,
116
- this.getEnv(config),
117
- (error, payment2) => {
118
- if (error) {
119
- rej(error);
120
- } else {
121
- res(payment2);
122
- }
123
- }
124
- );
125
- });
126
- }
127
- async getStatus(trans) {
128
- const orderId = this.getOrderId(trans) ?? "";
129
- const config = await this.getConfig(trans.data);
130
- const payment2 = await new Promise((res, rej) => {
131
- paypal.payment.get(
132
- orderId,
133
- this.getEnv(config),
134
- (error, result) => {
135
- if (error) {
136
- rej(error);
137
- } else {
138
- res(result);
139
- }
140
- }
141
- );
142
- });
143
- return {
144
- status: this.getStatusFromExternal(payment2.state),
145
- data: payment2
146
- };
147
- }
148
- async refund(trans, comment) {
149
- const orderId = this.getOrderId(trans);
150
- const config = await this.getConfig(trans.data);
151
- const transactionId = this.getTransactionId(trans);
152
- if (!transactionId) {
153
- throw new Error("Paypal transaction ID not found for refund");
154
- }
155
- const refundData = {
156
- amount: {
157
- total: (trans.amount / 100).toString(),
158
- currency: config.currencyCode
159
- },
160
- description: comment
161
- };
162
- return new Promise((resolve, reject) => {
163
- paypal.sale.refund(
164
- transactionId,
165
- refundData,
166
- this.getEnv(config),
167
- (error, refund) => {
168
- if (error) {
169
- reject(error);
170
- } else {
171
- resolve(refund);
172
- }
173
- }
174
- );
175
- });
176
- }
177
- getOrderId(trans) {
178
- const historyItem = trans.history.find((x) => x.status === "started");
179
- if (!historyItem) {
180
- console.warn("Transaction without start status");
181
- return null;
182
- }
183
- return historyItem.data.orderId;
184
- }
185
- getStatusFromExternal(status) {
186
- status = status.toUpperCase();
187
- switch (status) {
188
- case "COMPLETED":
189
- return "completed";
190
- case "VOIDED":
191
- return "canceled";
192
- case "CREATED":
193
- return "pending";
194
- case "SAVED":
195
- return "pending";
196
- case "APPROVED":
197
- return "completed";
198
- default:
199
- return status;
200
- }
201
- }
202
- async getConfig(data) {
203
- try {
204
- const provider = this.moduleRef.get(
205
- PAYPAL_CONFIG_PROVIDER,
206
- { strict: false }
207
- );
208
- return await provider.get(data);
209
- } catch (e) {
210
- Logger.warn("PayPal config provider not found", PaypalService.name);
211
- }
212
- return this.config;
213
- }
214
- getEnv(config) {
215
- return {
216
- mode: config.test ? "sandbox" : "live",
217
- client_id: config.clientId,
218
- client_secret: config.clientSecret
219
- };
220
- }
221
- getApiUrl(config) {
222
- return config.test ? "https://api-m.sandbox.paypal.com/" : "https://api-m.paypal.com/";
223
- }
224
- getTransactionId(trans) {
225
- const historyItem = trans.history.find(
226
- (i) => i.status === "completed" && i.data && i.data.customData && i.data.customData.transactions && i.data.customData.transactions.length && i.data.customData.transactions[0].related_resources && i.data.customData.transactions[0].related_resources.length && i.data.customData.transactions[0].related_resources[0].sale
227
- );
228
- return historyItem ? historyItem.data.customData.transactions[0].related_resources[0].sale.id : null;
229
- }
230
- };
231
- PaypalService = __decorateClass([
232
- Injectable()
233
- ], PaypalService);
234
- export {
235
- IPaypalConfigProvider,
236
- PAYPAL_CONFIG_PROVIDER,
237
- PaypalConfig,
238
- PaypalService
239
- };