@easyflow/javascript-sdk 2.1.8 → 2.1.9

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.
Files changed (94) hide show
  1. package/README.md +71 -7
  2. package/dist/index.d.ts +421 -0
  3. package/package.json +19 -6
  4. package/.babelrc +0 -5
  5. package/.github/workflows/deploy-sdk-cf.yml +0 -49
  6. package/.github/workflows/release-sdk-cdn.yml +0 -144
  7. package/.github/workflows/release-sdk.yml +0 -112
  8. package/.prettierrc +0 -6
  9. package/CDN-DEPLOYMENT.md +0 -175
  10. package/DEMO.md +0 -258
  11. package/DEPLOYMENT.md +0 -224
  12. package/INTEGRATION-GUIDE.md +0 -521
  13. package/coverage/base.css +0 -224
  14. package/coverage/block-navigation.js +0 -87
  15. package/coverage/easyflow-javascript-sdk/index.html +0 -116
  16. package/coverage/easyflow-javascript-sdk/libs/constants.mjs.html +0 -268
  17. package/coverage/easyflow-javascript-sdk/libs/errors.mjs.html +0 -271
  18. package/coverage/easyflow-javascript-sdk/libs/exception-handler.mjs.html +0 -148
  19. package/coverage/easyflow-javascript-sdk/libs/fingerprint.mjs.html +0 -895
  20. package/coverage/easyflow-javascript-sdk/libs/http.mjs.html +0 -502
  21. package/coverage/easyflow-javascript-sdk/libs/index.html +0 -266
  22. package/coverage/easyflow-javascript-sdk/libs/logger.mjs.html +0 -568
  23. package/coverage/easyflow-javascript-sdk/libs/sanitizer.mjs.html +0 -1099
  24. package/coverage/easyflow-javascript-sdk/libs/security.mjs.html +0 -733
  25. package/coverage/easyflow-javascript-sdk/libs/types.mjs.html +0 -508
  26. package/coverage/easyflow-javascript-sdk/libs/utils.mjs.html +0 -379
  27. package/coverage/easyflow-javascript-sdk/libs/validator.mjs.html +0 -2623
  28. package/coverage/easyflow-javascript-sdk/sdk.mjs.html +0 -2434
  29. package/coverage/favicon.png +0 -0
  30. package/coverage/index.html +0 -131
  31. package/coverage/lcov-report/base.css +0 -224
  32. package/coverage/lcov-report/block-navigation.js +0 -87
  33. package/coverage/lcov-report/easyflow-javascript-sdk/index.html +0 -116
  34. package/coverage/lcov-report/easyflow-javascript-sdk/libs/constants.mjs.html +0 -268
  35. package/coverage/lcov-report/easyflow-javascript-sdk/libs/errors.mjs.html +0 -271
  36. package/coverage/lcov-report/easyflow-javascript-sdk/libs/exception-handler.mjs.html +0 -148
  37. package/coverage/lcov-report/easyflow-javascript-sdk/libs/fingerprint.mjs.html +0 -895
  38. package/coverage/lcov-report/easyflow-javascript-sdk/libs/http.mjs.html +0 -502
  39. package/coverage/lcov-report/easyflow-javascript-sdk/libs/index.html +0 -266
  40. package/coverage/lcov-report/easyflow-javascript-sdk/libs/logger.mjs.html +0 -568
  41. package/coverage/lcov-report/easyflow-javascript-sdk/libs/sanitizer.mjs.html +0 -1099
  42. package/coverage/lcov-report/easyflow-javascript-sdk/libs/security.mjs.html +0 -733
  43. package/coverage/lcov-report/easyflow-javascript-sdk/libs/types.mjs.html +0 -508
  44. package/coverage/lcov-report/easyflow-javascript-sdk/libs/utils.mjs.html +0 -379
  45. package/coverage/lcov-report/easyflow-javascript-sdk/libs/validator.mjs.html +0 -2623
  46. package/coverage/lcov-report/easyflow-javascript-sdk/sdk.mjs.html +0 -2434
  47. package/coverage/lcov-report/favicon.png +0 -0
  48. package/coverage/lcov-report/index.html +0 -131
  49. package/coverage/lcov-report/prettify.css +0 -1
  50. package/coverage/lcov-report/prettify.js +0 -2
  51. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  52. package/coverage/lcov-report/sorter.js +0 -196
  53. package/coverage/lcov.info +0 -1429
  54. package/coverage/prettify.css +0 -1
  55. package/coverage/prettify.js +0 -2
  56. package/coverage/sort-arrow-sprite.png +0 -0
  57. package/coverage/sorter.js +0 -196
  58. package/dist/435.easyflow-sdk.min.js +0 -1
  59. package/dist/easyflow-sdk.min.js +0 -1
  60. package/dist/easyflow-sdk.min.js.LICENSE.txt +0 -1
  61. package/dist/index.html +0 -756
  62. package/docs/index.html +0 -775
  63. package/examples/lovable-integration.html +0 -410
  64. package/index.html +0 -981
  65. package/jest.config.js +0 -37
  66. package/jsdoc.json +0 -42
  67. package/libs/auto-integration.mjs +0 -333
  68. package/libs/constants.mjs +0 -61
  69. package/libs/constants.spec.js +0 -198
  70. package/libs/errors.mjs +0 -62
  71. package/libs/errors.spec.js +0 -178
  72. package/libs/exception-handler.mjs +0 -21
  73. package/libs/exception-handler.spec.js +0 -237
  74. package/libs/fingerprint.mjs +0 -270
  75. package/libs/http.mjs +0 -163
  76. package/libs/http.spec.js +0 -427
  77. package/libs/integration-wrapper.mjs +0 -285
  78. package/libs/logger.mjs +0 -161
  79. package/libs/logger.spec.js +0 -389
  80. package/libs/sanitizer.mjs +0 -340
  81. package/libs/sanitizer.spec.js +0 -583
  82. package/libs/security.mjs +0 -217
  83. package/libs/types.mjs +0 -141
  84. package/libs/utils.mjs +0 -368
  85. package/libs/utils.spec.js +0 -231
  86. package/libs/validator.mjs +0 -952
  87. package/libs/validator.spec.js +0 -615
  88. package/mocks/offer.mock.js +0 -77
  89. package/scripts/publish-npm.sh +0 -82
  90. package/sdk.mjs +0 -945
  91. package/sdk.spec.js +0 -796
  92. package/test-setup.cjs +0 -211
  93. package/test.html +0 -154
  94. package/webpack.config.cjs +0 -41
@@ -1,389 +0,0 @@
1
- import { jest } from '@jest/globals'
2
- import { SecureLogger } from './logger.mjs'
3
-
4
- // Mock console methods
5
- const originalConsole = { ...console }
6
- const mockConsole = {
7
- error: jest.fn(),
8
- warn: jest.fn(),
9
- log: jest.fn(),
10
- }
11
-
12
- describe('SecureLogger', () => {
13
- let logger
14
-
15
- beforeEach(() => {
16
- jest.clearAllMocks()
17
- // Replace console methods with mocks
18
- global.console = mockConsole
19
- })
20
-
21
- afterEach(() => {
22
- // Restore original console methods
23
- global.console = originalConsole
24
- })
25
-
26
- describe('constructor', () => {
27
- test('should create logger with default error level', () => {
28
- logger = new SecureLogger()
29
- expect(logger.level).toBe('error')
30
- expect(logger.levels).toEqual({
31
- error: 0,
32
- warn: 1,
33
- info: 2,
34
- debug: 3,
35
- })
36
- })
37
-
38
- test('should create logger with custom level', () => {
39
- logger = new SecureLogger('info')
40
- expect(logger.level).toBe('info')
41
- })
42
-
43
- test('should create logger with debug level', () => {
44
- logger = new SecureLogger('debug')
45
- expect(logger.level).toBe('debug')
46
- })
47
- })
48
-
49
- describe('log method', () => {
50
- beforeEach(() => {
51
- logger = new SecureLogger('info')
52
- })
53
-
54
- test('should log error message when level is error', () => {
55
- logger.log('error', 'Test error message', { error: 'details' })
56
-
57
- expect(mockConsole.error).toHaveBeenCalledWith(
58
- '[EasyflowSDK:ERROR] Test error message',
59
- { error: 'details' }
60
- )
61
- })
62
-
63
- test('should log warn message when level is warn', () => {
64
- logger.log('warn', 'Test warning message', { warning: 'details' })
65
-
66
- expect(mockConsole.warn).toHaveBeenCalledWith(
67
- '[EasyflowSDK:WARN] Test warning message',
68
- { warning: 'details' }
69
- )
70
- })
71
-
72
- test('should log info message when level is info', () => {
73
- logger.log('info', 'Test info message', { info: 'details' })
74
-
75
- expect(mockConsole.log).toHaveBeenCalledWith(
76
- '[EasyflowSDK:INFO] Test info message',
77
- { info: 'details' }
78
- )
79
- })
80
-
81
- test('should log debug message when level is debug', () => {
82
- logger = new SecureLogger('debug')
83
- logger.log('debug', 'Test debug message', { debug: 'details' })
84
-
85
- expect(mockConsole.log).toHaveBeenCalledWith(
86
- '[EasyflowSDK:DEBUG] Test debug message',
87
- { debug: 'details' }
88
- )
89
- })
90
-
91
- test('should not log when message level is higher than logger level', () => {
92
- logger = new SecureLogger('error')
93
- logger.log('info', 'This should not be logged')
94
-
95
- expect(mockConsole.log).not.toHaveBeenCalled()
96
- expect(mockConsole.error).not.toHaveBeenCalled()
97
- })
98
-
99
- test('should log when message level is equal to logger level', () => {
100
- logger = new SecureLogger('warn')
101
- logger.log('warn', 'This should be logged')
102
-
103
- expect(mockConsole.warn).toHaveBeenCalledWith(
104
- '[EasyflowSDK:WARN] This should be logged',
105
- null
106
- )
107
- })
108
-
109
- test('should log when message level is lower than logger level', () => {
110
- logger = new SecureLogger('debug')
111
- logger.log('error', 'This should be logged')
112
-
113
- expect(mockConsole.error).toHaveBeenCalledWith(
114
- '[EasyflowSDK:ERROR] This should be logged',
115
- null
116
- )
117
- })
118
-
119
- test('should handle null data', () => {
120
- logger.log('info', 'Test message', null)
121
-
122
- expect(mockConsole.log).toHaveBeenCalledWith(
123
- '[EasyflowSDK:INFO] Test message',
124
- null
125
- )
126
- })
127
-
128
- test('should handle undefined data', () => {
129
- logger.log('info', 'Test message', undefined)
130
-
131
- expect(mockConsole.log).toHaveBeenCalledWith(
132
- '[EasyflowSDK:INFO] Test message',
133
- null
134
- )
135
- })
136
- })
137
-
138
- describe('sanitizeData method', () => {
139
- beforeEach(() => {
140
- logger = new SecureLogger()
141
- })
142
-
143
- test('should return null for null data', () => {
144
- const result = logger.sanitizeData(null)
145
- expect(result).toBeNull()
146
- })
147
-
148
- test('should return null for undefined data', () => {
149
- const result = logger.sanitizeData(undefined)
150
- expect(result).toBeNull()
151
- })
152
-
153
- test('should redact sensitive fields', () => {
154
- const data = {
155
- cardNumber: '4111111111111111',
156
- cvv: '123',
157
- token: 'secret-token',
158
- password: 'secret-password',
159
- apiKey: 'secret-api-key',
160
- private: 'private-data',
161
- credential: 'credential-data',
162
- }
163
-
164
- const result = logger.sanitizeData(data)
165
-
166
- expect(result.cardNumber).toBe('[REDACTED]')
167
- expect(result.cvv).toBe('[REDACTED]')
168
- expect(result.token).toBe('[REDACTED]')
169
- expect(result.password).toBe('[REDACTED]')
170
- expect(result.apiKey).toBe('[REDACTED]')
171
- expect(result.private).toBe('[REDACTED]')
172
- expect(result.credential).toBe('[REDACTED]')
173
- })
174
-
175
- test('should redact case-insensitive sensitive fields', () => {
176
- const data = {
177
- CardNumber: '4111111111111111',
178
- CVV: '123',
179
- Token: 'secret-token',
180
- APIKEY: 'secret-api-key',
181
- }
182
-
183
- const result = logger.sanitizeData(data)
184
-
185
- expect(result.CardNumber).toBe('[REDACTED]')
186
- expect(result.CVV).toBe('[REDACTED]')
187
- expect(result.Token).toBe('[REDACTED]')
188
- expect(result.APIKEY).toBe('[REDACTED]')
189
- })
190
-
191
- test('should truncate long strings', () => {
192
- const longString = 'a'.repeat(150)
193
- const data = {
194
- message: longString,
195
- shortMessage: 'short',
196
- }
197
-
198
- const result = logger.sanitizeData(data)
199
-
200
- expect(result.message).toBe('a'.repeat(100) + '...')
201
- expect(result.shortMessage).toBe('short')
202
- })
203
-
204
- test('should handle nested objects', () => {
205
- const data = {
206
- user: {
207
- cardNumber: '4111111111111111',
208
- name: 'John Doe',
209
- },
210
- payment: {
211
- token: 'secret-token',
212
- amount: 1000,
213
- },
214
- }
215
-
216
- const result = logger.sanitizeData(data)
217
-
218
- expect(result.user.cardNumber).toBe('[REDACTED]')
219
- expect(result.user.name).toBe('John Doe')
220
- expect(result.payment.token).toBe('[REDACTED]')
221
- expect(result.payment.amount).toBe(1000)
222
- })
223
-
224
- test('should handle arrays', () => {
225
- const data = {
226
- payments: [
227
- { cardNumber: '4111111111111111', amount: 100 },
228
- { cardNumber: '5555555555554444', amount: 200 },
229
- ],
230
- }
231
-
232
- const result = logger.sanitizeData(data)
233
-
234
- expect(result.payments[0].cardNumber).toBe('[REDACTED]')
235
- expect(result.payments[0].amount).toBe(100)
236
- expect(result.payments[1].cardNumber).toBe('[REDACTED]')
237
- expect(result.payments[1].amount).toBe(200)
238
- })
239
-
240
- test('should preserve non-sensitive data', () => {
241
- const data = {
242
- orderId: 'order-123',
243
- amount: 1000,
244
- status: 'pending',
245
- customer: {
246
- name: 'John Doe',
247
- email: 'john@example.com',
248
- },
249
- }
250
-
251
- const result = logger.sanitizeData(data)
252
-
253
- expect(result.orderId).toBe('order-123')
254
- expect(result.amount).toBe(1000)
255
- expect(result.status).toBe('pending')
256
- expect(result.customer.name).toBe('John Doe')
257
- expect(result.customer.email).toBe('john@example.com')
258
- })
259
-
260
- test('should handle mixed sensitive and non-sensitive data', () => {
261
- const data = {
262
- orderId: 'order-123',
263
- cardNumber: '4111111111111111',
264
- amount: 1000,
265
- token: 'secret-token',
266
- customer: {
267
- name: 'John Doe',
268
- cvv: '123',
269
- },
270
- }
271
-
272
- const result = logger.sanitizeData(data)
273
-
274
- expect(result.orderId).toBe('order-123')
275
- expect(result.cardNumber).toBe('[REDACTED]')
276
- expect(result.amount).toBe(1000)
277
- expect(result.token).toBe('[REDACTED]')
278
- expect(result.customer.name).toBe('John Doe')
279
- expect(result.customer.cvv).toBe('[REDACTED]')
280
- })
281
- })
282
-
283
- describe('convenience methods', () => {
284
- beforeEach(() => {
285
- logger = new SecureLogger('debug')
286
- })
287
-
288
- test('should call log with error level', () => {
289
- logger.error('Error message', { error: 'details' })
290
-
291
- expect(mockConsole.error).toHaveBeenCalledWith(
292
- '[EasyflowSDK:ERROR] Error message',
293
- { error: 'details' }
294
- )
295
- })
296
-
297
- test('should call log with warn level', () => {
298
- logger.warn('Warning message', { warning: 'details' })
299
-
300
- expect(mockConsole.warn).toHaveBeenCalledWith(
301
- '[EasyflowSDK:WARN] Warning message',
302
- { warning: 'details' }
303
- )
304
- })
305
-
306
- test('should call log with info level', () => {
307
- logger.info('Info message', { info: 'details' })
308
-
309
- expect(mockConsole.log).toHaveBeenCalledWith(
310
- '[EasyflowSDK:INFO] Info message',
311
- { info: 'details' }
312
- )
313
- })
314
-
315
- test('should call log with debug level', () => {
316
- logger.debug('Debug message', { debug: 'details' })
317
-
318
- expect(mockConsole.log).toHaveBeenCalledWith(
319
- '[EasyflowSDK:DEBUG] Debug message',
320
- { debug: 'details' }
321
- )
322
- })
323
-
324
- test('should handle null data in convenience methods', () => {
325
- logger.error('Error message')
326
- logger.warn('Warning message')
327
- logger.info('Info message')
328
- logger.debug('Debug message')
329
-
330
- expect(mockConsole.error).toHaveBeenCalledWith(
331
- '[EasyflowSDK:ERROR] Error message',
332
- null
333
- )
334
- expect(mockConsole.warn).toHaveBeenCalledWith(
335
- '[EasyflowSDK:WARN] Warning message',
336
- null
337
- )
338
- expect(mockConsole.log).toHaveBeenCalledWith(
339
- '[EasyflowSDK:INFO] Info message',
340
- null
341
- )
342
- expect(mockConsole.log).toHaveBeenCalledWith(
343
- '[EasyflowSDK:DEBUG] Debug message',
344
- null
345
- )
346
- })
347
- })
348
-
349
- describe('level filtering', () => {
350
- test('should filter messages based on logger level', () => {
351
- logger = new SecureLogger('warn')
352
-
353
- logger.error('Error message')
354
- logger.warn('Warning message')
355
- logger.info('Info message')
356
- logger.debug('Debug message')
357
-
358
- expect(mockConsole.error).toHaveBeenCalledTimes(1)
359
- expect(mockConsole.warn).toHaveBeenCalledTimes(1)
360
- expect(mockConsole.log).not.toHaveBeenCalled()
361
- })
362
-
363
- test('should allow all messages when level is debug', () => {
364
- logger = new SecureLogger('debug')
365
-
366
- logger.error('Error message')
367
- logger.warn('Warning message')
368
- logger.info('Info message')
369
- logger.debug('Debug message')
370
-
371
- expect(mockConsole.error).toHaveBeenCalledTimes(1)
372
- expect(mockConsole.warn).toHaveBeenCalledTimes(1)
373
- expect(mockConsole.log).toHaveBeenCalledTimes(2)
374
- })
375
-
376
- test('should only allow error messages when level is error', () => {
377
- logger = new SecureLogger('error')
378
-
379
- logger.error('Error message')
380
- logger.warn('Warning message')
381
- logger.info('Info message')
382
- logger.debug('Debug message')
383
-
384
- expect(mockConsole.error).toHaveBeenCalledTimes(1)
385
- expect(mockConsole.warn).not.toHaveBeenCalled()
386
- expect(mockConsole.log).not.toHaveBeenCalled()
387
- })
388
- })
389
- })