@pixelpay/sdk-core 2.4.12 → 2.4.13-beta.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/CHANGELOG.md +4 -0
- package/lib/base/Helpers.d.ts +17 -1
- package/lib/base/Helpers.js +38 -2
- package/lib/base/Helpers.js.map +1 -1
- package/lib/base/RequestBehaviour.d.ts +24 -0
- package/lib/base/RequestBehaviour.js +30 -1
- package/lib/base/RequestBehaviour.js.map +1 -1
- package/lib/base/ServiceBehaviour.d.ts +30 -0
- package/lib/base/ServiceBehaviour.js +79 -0
- package/lib/base/ServiceBehaviour.js.map +1 -1
- package/lib/browser/index.js +7 -7
- package/lib/exceptions/FailedEncryptionException.d.ts +2 -0
- package/lib/exceptions/FailedEncryptionException.js +6 -0
- package/lib/exceptions/FailedEncryptionException.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/models/Settings.d.ts +4 -0
- package/lib/models/Settings.js +4 -0
- package/lib/models/Settings.js.map +1 -1
- package/lib/requests/CardTokenization.d.ts +14 -0
- package/lib/requests/CardTokenization.js +44 -0
- package/lib/requests/CardTokenization.js.map +1 -1
- package/lib/requests/LookupTransaction.d.ts +14 -0
- package/lib/requests/LookupTransaction.js +42 -0
- package/lib/requests/LookupTransaction.js.map +1 -1
- package/lib/requests/PaymentTransaction.d.ts +14 -0
- package/lib/requests/PaymentTransaction.js +42 -0
- package/lib/requests/PaymentTransaction.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,10 @@ El formato se basa en [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
5
5
|
y este proyecto se adhiere a [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
Tipos de cambios: `Added`, `Changed`, `Deprecated`, `Removed`, `Fixed`, `Security`.
|
|
7
7
|
|
|
8
|
+
## [v2.4.13] - unreleased
|
|
9
|
+
### Added
|
|
10
|
+
- Se agregó encriptación de datos de tarjeta.
|
|
11
|
+
|
|
8
12
|
## [v2.4.12] - 2026-03-31
|
|
9
13
|
### Added
|
|
10
14
|
- Se agregó `timeout` para esperar que se complete el methodURL de cardinal
|
package/lib/base/Helpers.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import nacl from 'tweetnacl';
|
|
1
2
|
declare const _default: {
|
|
2
3
|
/**
|
|
3
4
|
* Serialize object to JSON string without empties
|
|
@@ -5,7 +6,7 @@ declare const _default: {
|
|
|
5
6
|
* @param value
|
|
6
7
|
* @return
|
|
7
8
|
*/
|
|
8
|
-
objectToJson(value: any): string;
|
|
9
|
+
objectToJson(value: any, ignore?: string[]): string;
|
|
9
10
|
/**
|
|
10
11
|
* Helper to hash object by algorithm
|
|
11
12
|
*
|
|
@@ -35,6 +36,21 @@ declare const _default: {
|
|
|
35
36
|
* @return
|
|
36
37
|
*/
|
|
37
38
|
parseAmount(amount: number | null | undefined): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Generate encryption key pair
|
|
41
|
+
*
|
|
42
|
+
* @return
|
|
43
|
+
*/
|
|
44
|
+
getKeyPair(): nacl.BoxKeyPair;
|
|
45
|
+
/**
|
|
46
|
+
* Encrypt message, returns encrypted value concatenated with base64 nonce.
|
|
47
|
+
*
|
|
48
|
+
* @param message
|
|
49
|
+
* @param publicKey
|
|
50
|
+
* @param keyPair
|
|
51
|
+
* @return
|
|
52
|
+
*/
|
|
53
|
+
encrypt(message: string | null, publicKey: string | null, keyPair: nacl.BoxKeyPair): string | null;
|
|
38
54
|
/**
|
|
39
55
|
* Verify if environment is a Browser
|
|
40
56
|
*/
|
package/lib/base/Helpers.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
7
|
+
const tweetnacl_util_1 = __importDefault(require("tweetnacl-util"));
|
|
3
8
|
const crypto_js_1 = require("crypto-js");
|
|
4
9
|
exports.default = {
|
|
5
10
|
/**
|
|
@@ -8,10 +13,10 @@ exports.default = {
|
|
|
8
13
|
* @param value
|
|
9
14
|
* @return
|
|
10
15
|
*/
|
|
11
|
-
objectToJson(value) {
|
|
16
|
+
objectToJson(value, ignore = []) {
|
|
12
17
|
const filtered = Object.assign({}, value);
|
|
13
18
|
for (var propName in filtered) {
|
|
14
|
-
if (filtered[propName] === null || filtered[propName] === undefined) {
|
|
19
|
+
if (filtered[propName] === null || filtered[propName] === undefined || ignore.includes(propName)) {
|
|
15
20
|
delete filtered[propName];
|
|
16
21
|
}
|
|
17
22
|
}
|
|
@@ -70,6 +75,37 @@ exports.default = {
|
|
|
70
75
|
}
|
|
71
76
|
return null;
|
|
72
77
|
},
|
|
78
|
+
/**
|
|
79
|
+
* Generate encryption key pair
|
|
80
|
+
*
|
|
81
|
+
* @return
|
|
82
|
+
*/
|
|
83
|
+
getKeyPair() {
|
|
84
|
+
return tweetnacl_1.default.box.keyPair();
|
|
85
|
+
},
|
|
86
|
+
/**
|
|
87
|
+
* Encrypt message, returns encrypted value concatenated with base64 nonce.
|
|
88
|
+
*
|
|
89
|
+
* @param message
|
|
90
|
+
* @param publicKey
|
|
91
|
+
* @param keyPair
|
|
92
|
+
* @return
|
|
93
|
+
*/
|
|
94
|
+
encrypt(message, publicKey, keyPair) {
|
|
95
|
+
if (!message) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
if (message.includes('|')) {
|
|
99
|
+
return message;
|
|
100
|
+
}
|
|
101
|
+
const nonce = tweetnacl_1.default.randomBytes(24);
|
|
102
|
+
const merchantPublicKey = tweetnacl_util_1.default.decodeBase64(publicKey);
|
|
103
|
+
const sharedKey = tweetnacl_1.default.box.before(merchantPublicKey, keyPair.secretKey);
|
|
104
|
+
const box = tweetnacl_1.default.box.after(tweetnacl_util_1.default.decodeUTF8(message), nonce, sharedKey);
|
|
105
|
+
const boxb64 = tweetnacl_util_1.default.encodeBase64(box);
|
|
106
|
+
const nonceb64 = tweetnacl_util_1.default.encodeBase64(nonce);
|
|
107
|
+
return `${boxb64}|${nonceb64}`;
|
|
108
|
+
},
|
|
73
109
|
/**
|
|
74
110
|
* Verify if environment is a Browser
|
|
75
111
|
*/
|
package/lib/base/Helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../src/base/Helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../src/base/Helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import nacl from 'tweetnacl';
|
|
1
2
|
export default class RequestBehaviour {
|
|
2
3
|
/**
|
|
3
4
|
* Environment identifier (live|test|sandbox)
|
|
@@ -15,10 +16,33 @@ export default class RequestBehaviour {
|
|
|
15
16
|
* SDK version
|
|
16
17
|
*/
|
|
17
18
|
sdk_version: string;
|
|
19
|
+
/**
|
|
20
|
+
* For internal use to prevent encrypting same request instance twice
|
|
21
|
+
*/
|
|
22
|
+
protected sdk_key_pair: nacl.BoxKeyPair;
|
|
18
23
|
/**
|
|
19
24
|
* Initialize request
|
|
20
25
|
*/
|
|
21
26
|
constructor();
|
|
27
|
+
/**
|
|
28
|
+
* Get sdk_key_pair from current instance
|
|
29
|
+
*
|
|
30
|
+
* @return
|
|
31
|
+
*/
|
|
32
|
+
getSDKKeyPair(): nacl.BoxKeyPair | null;
|
|
33
|
+
/**
|
|
34
|
+
* Check if current request needs encryption, must be overriden by inherited classes.
|
|
35
|
+
*
|
|
36
|
+
* @return
|
|
37
|
+
*/
|
|
38
|
+
isEncryptable(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Encrypt fields with sensitive data, must be overriden by inherited classes.
|
|
41
|
+
*
|
|
42
|
+
* @param publicKey
|
|
43
|
+
* @return
|
|
44
|
+
*/
|
|
45
|
+
withEncryption(publicKey: string): string | null;
|
|
22
46
|
/**
|
|
23
47
|
* Serialize object to JSON string
|
|
24
48
|
*
|
|
@@ -26,6 +26,10 @@ class RequestBehaviour {
|
|
|
26
26
|
* SDK version
|
|
27
27
|
*/
|
|
28
28
|
this.sdk_version = null;
|
|
29
|
+
/**
|
|
30
|
+
* For internal use to prevent encrypting same request instance twice
|
|
31
|
+
*/
|
|
32
|
+
this.sdk_key_pair = null;
|
|
29
33
|
this.lang = Intl.DateTimeFormat().resolvedOptions().locale;
|
|
30
34
|
this.from = 'sdk-javascript';
|
|
31
35
|
this.sdk_version = version_1.default;
|
|
@@ -33,13 +37,38 @@ class RequestBehaviour {
|
|
|
33
37
|
this.lang = 'es';
|
|
34
38
|
}
|
|
35
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Get sdk_key_pair from current instance
|
|
42
|
+
*
|
|
43
|
+
* @return
|
|
44
|
+
*/
|
|
45
|
+
getSDKKeyPair() {
|
|
46
|
+
return this.sdk_key_pair;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if current request needs encryption, must be overriden by inherited classes.
|
|
50
|
+
*
|
|
51
|
+
* @return
|
|
52
|
+
*/
|
|
53
|
+
isEncryptable() {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Encrypt fields with sensitive data, must be overriden by inherited classes.
|
|
58
|
+
*
|
|
59
|
+
* @param publicKey
|
|
60
|
+
* @return
|
|
61
|
+
*/
|
|
62
|
+
withEncryption(publicKey) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
36
65
|
/**
|
|
37
66
|
* Serialize object to JSON string
|
|
38
67
|
*
|
|
39
68
|
* @return
|
|
40
69
|
*/
|
|
41
70
|
toJson() {
|
|
42
|
-
return Helpers_1.default.objectToJson(this);
|
|
71
|
+
return Helpers_1.default.objectToJson(this, ['sdk_key_pair']);
|
|
43
72
|
}
|
|
44
73
|
}
|
|
45
74
|
exports.default = RequestBehaviour;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestBehaviour.js","sourceRoot":"","sources":["../../src/base/RequestBehaviour.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"RequestBehaviour.js","sourceRoot":"","sources":["../../src/base/RequestBehaviour.ts"],"names":[],"mappings":";;;;;AACA,wDAAgC;AAChC,yDAAiC;AAEjC,MAAqB,gBAAgB;IA0BpC;;OAEG;IACH;QA5BA;;WAEG;QACH,QAAG,GAAW,IAAI,CAAC;QAEnB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAC;QAEpB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAC;QAEpB;;WAEG;QACH,gBAAW,GAAW,IAAI,CAAC;QAE3B;;WAEG;QACO,iBAAY,GAAoB,IAAI,CAAC;QAM9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,iBAAO,CAAC;QAE3B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACjB;IACF,CAAC;IAED;;;;OAIG;IACH,aAAa;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,aAAa;QACZ,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAGD;;;;OAIG;IACH,MAAM;QACL,OAAO,iBAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACrD,CAAC;CACD;AA5ED,mCA4EC"}
|
|
@@ -6,6 +6,10 @@ export default class ServiceBehaviour {
|
|
|
6
6
|
* Settings service model
|
|
7
7
|
*/
|
|
8
8
|
settings: Settings;
|
|
9
|
+
/**
|
|
10
|
+
* Public key from pair generated by current instance.
|
|
11
|
+
*/
|
|
12
|
+
private sdk_public_key;
|
|
9
13
|
/**
|
|
10
14
|
* Initialize service
|
|
11
15
|
*/
|
|
@@ -33,6 +37,32 @@ export default class ServiceBehaviour {
|
|
|
33
37
|
* @returns
|
|
34
38
|
*/
|
|
35
39
|
private exceptionResponse;
|
|
40
|
+
/**
|
|
41
|
+
* Verify and set request encryption values
|
|
42
|
+
*
|
|
43
|
+
* @param request
|
|
44
|
+
*/
|
|
45
|
+
private validateEncryption;
|
|
46
|
+
/**
|
|
47
|
+
* Resiliently fetch merchant public key, trying at least 3 times before failing
|
|
48
|
+
*
|
|
49
|
+
* @throws InvalidCredentialsException
|
|
50
|
+
*/
|
|
51
|
+
private validateMerchantPublicKey;
|
|
52
|
+
/**
|
|
53
|
+
* Resiliently generate keys and encrypt request, trying at least 3 times before failing
|
|
54
|
+
*
|
|
55
|
+
* @param request
|
|
56
|
+
* @throws FailedEncryptionException
|
|
57
|
+
*/
|
|
58
|
+
private validateSDKPublicKey;
|
|
59
|
+
/**
|
|
60
|
+
* Fetch merchant public key for encryption
|
|
61
|
+
*
|
|
62
|
+
* @return
|
|
63
|
+
* @throws InvalidCredentialsException
|
|
64
|
+
*/
|
|
65
|
+
private fetchMerchantPublicKey;
|
|
36
66
|
/**
|
|
37
67
|
* Get API route
|
|
38
68
|
*
|
|
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const axios_1 = __importDefault(require("axios"));
|
|
7
7
|
const InvalidCredentialsException_1 = __importDefault(require("../exceptions/InvalidCredentialsException"));
|
|
8
|
+
const FailedEncryptionException_1 = __importDefault(require("../exceptions/FailedEncryptionException"));
|
|
9
|
+
const RequestBehaviour_1 = __importDefault(require("./RequestBehaviour"));
|
|
8
10
|
const Response_1 = __importDefault(require("./Response"));
|
|
9
11
|
const ErrorResponse_1 = __importDefault(require("../responses/ErrorResponse"));
|
|
10
12
|
const FailureResponse_1 = __importDefault(require("../responses/FailureResponse"));
|
|
@@ -17,6 +19,7 @@ const PaymentDeclinedResponse_1 = __importDefault(require("../responses/PaymentD
|
|
|
17
19
|
const PreconditionalResponse_1 = __importDefault(require("../responses/PreconditionalResponse"));
|
|
18
20
|
const SuccessResponse_1 = __importDefault(require("../responses/SuccessResponse"));
|
|
19
21
|
const TimeoutResponse_1 = __importDefault(require("../responses/TimeoutResponse"));
|
|
22
|
+
const PUBLIC_KEY_PATH = 'api/v2/merchant/public_key';
|
|
20
23
|
class ServiceBehaviour {
|
|
21
24
|
/**
|
|
22
25
|
* Initialize service
|
|
@@ -56,6 +59,9 @@ class ServiceBehaviour {
|
|
|
56
59
|
if (this.settings.auth_user) {
|
|
57
60
|
headers['x-auth-user'] = this.settings.auth_user;
|
|
58
61
|
}
|
|
62
|
+
if (this.sdk_public_key) {
|
|
63
|
+
headers['x-auth-secure'] = this.sdk_public_key;
|
|
64
|
+
}
|
|
59
65
|
if (this.settings.headers) {
|
|
60
66
|
for (const header in this.settings.headers) {
|
|
61
67
|
headers[header] = this.settings.headers[header];
|
|
@@ -139,6 +145,73 @@ class ServiceBehaviour {
|
|
|
139
145
|
response.message = e.message;
|
|
140
146
|
return response;
|
|
141
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Verify and set request encryption values
|
|
150
|
+
*
|
|
151
|
+
* @param request
|
|
152
|
+
*/
|
|
153
|
+
async validateEncryption(request) {
|
|
154
|
+
if (!request.isEncryptable()) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
await this.validateMerchantPublicKey();
|
|
158
|
+
this.validateSDKPublicKey(request);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Resiliently fetch merchant public key, trying at least 3 times before failing
|
|
162
|
+
*
|
|
163
|
+
* @throws InvalidCredentialsException
|
|
164
|
+
*/
|
|
165
|
+
async validateMerchantPublicKey() {
|
|
166
|
+
let tries = 0;
|
|
167
|
+
while (!this.settings.public_key && tries < 3) {
|
|
168
|
+
this.settings.public_key = await this.fetchMerchantPublicKey();
|
|
169
|
+
tries++;
|
|
170
|
+
}
|
|
171
|
+
if (this.settings.public_key == null) {
|
|
172
|
+
throw new InvalidCredentialsException_1.default('Could not obtain necessary credentials for transaction.');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Resiliently generate keys and encrypt request, trying at least 3 times before failing
|
|
177
|
+
*
|
|
178
|
+
* @param request
|
|
179
|
+
* @throws FailedEncryptionException
|
|
180
|
+
*/
|
|
181
|
+
validateSDKPublicKey(request) {
|
|
182
|
+
let tries = 0;
|
|
183
|
+
let lastError = null;
|
|
184
|
+
while (!this.sdk_public_key && tries < 3 || tries === 0) {
|
|
185
|
+
try {
|
|
186
|
+
this.sdk_public_key = request.withEncryption(this.settings.public_key);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
lastError = err;
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
tries++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (!this.sdk_public_key && lastError) {
|
|
196
|
+
throw lastError;
|
|
197
|
+
}
|
|
198
|
+
if (!this.sdk_public_key) {
|
|
199
|
+
throw new FailedEncryptionException_1.default('Could not process encryption, please try again.');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Fetch merchant public key for encryption
|
|
204
|
+
*
|
|
205
|
+
* @return
|
|
206
|
+
* @throws InvalidCredentialsException
|
|
207
|
+
*/
|
|
208
|
+
async fetchMerchantPublicKey() {
|
|
209
|
+
const response = await this.get(PUBLIC_KEY_PATH, new RequestBehaviour_1.default());
|
|
210
|
+
if (response.success) {
|
|
211
|
+
return response.getData('public_key');
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
142
215
|
/**
|
|
143
216
|
* Get API route
|
|
144
217
|
*
|
|
@@ -158,6 +231,7 @@ class ServiceBehaviour {
|
|
|
158
231
|
*/
|
|
159
232
|
async post(url, body) {
|
|
160
233
|
try {
|
|
234
|
+
await this.validateEncryption(body);
|
|
161
235
|
const response = await this.buildRequest(url, body).post(url, JSON.parse(body.toJson()));
|
|
162
236
|
return this.parseResponse(response.data, response.status);
|
|
163
237
|
}
|
|
@@ -175,6 +249,7 @@ class ServiceBehaviour {
|
|
|
175
249
|
*/
|
|
176
250
|
async put(url, body) {
|
|
177
251
|
try {
|
|
252
|
+
await this.validateEncryption(body);
|
|
178
253
|
const response = await this.buildRequest(url, body).put(url, JSON.parse(body.toJson()));
|
|
179
254
|
return this.parseResponse(response.data, response.status);
|
|
180
255
|
}
|
|
@@ -192,6 +267,7 @@ class ServiceBehaviour {
|
|
|
192
267
|
*/
|
|
193
268
|
async delete(url, body) {
|
|
194
269
|
try {
|
|
270
|
+
await this.validateEncryption(body);
|
|
195
271
|
const response = await this.buildRequest(url, body).delete(url, {
|
|
196
272
|
params: JSON.parse(body.toJson()),
|
|
197
273
|
});
|
|
@@ -211,6 +287,9 @@ class ServiceBehaviour {
|
|
|
211
287
|
*/
|
|
212
288
|
async get(url, body) {
|
|
213
289
|
try {
|
|
290
|
+
if (url !== PUBLIC_KEY_PATH) {
|
|
291
|
+
await this.validateEncryption(body);
|
|
292
|
+
}
|
|
214
293
|
const response = await this.buildRequest(url, body).get(url, {
|
|
215
294
|
params: JSON.parse(body.toJson()),
|
|
216
295
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceBehaviour.js","sourceRoot":"","sources":["../../src/base/ServiceBehaviour.ts"],"names":[],"mappings":";;;;;AAAA,kDAA6C;AAC7C,4GAAoF;
|
|
1
|
+
{"version":3,"file":"ServiceBehaviour.js","sourceRoot":"","sources":["../../src/base/ServiceBehaviour.ts"],"names":[],"mappings":"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"}
|