@wiicode/youcanpay-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.
Files changed (91) hide show
  1. package/README.md +848 -0
  2. package/dist/client.d.ts +17 -0
  3. package/dist/client.js +171 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/constants.d.ts +8 -0
  6. package/dist/constants.js +12 -0
  7. package/dist/constants.js.map +1 -0
  8. package/dist/enums/currency.enum.d.ts +8 -0
  9. package/dist/enums/currency.enum.js +13 -0
  10. package/dist/enums/currency.enum.js.map +1 -0
  11. package/dist/enums/index.d.ts +2 -0
  12. package/dist/enums/index.js +19 -0
  13. package/dist/enums/index.js.map +1 -0
  14. package/dist/enums/lang.enum.d.ts +5 -0
  15. package/dist/enums/lang.enum.js +10 -0
  16. package/dist/enums/lang.enum.js.map +1 -0
  17. package/dist/errors/index.d.ts +1 -0
  18. package/dist/errors/index.js +18 -0
  19. package/dist/errors/index.js.map +1 -0
  20. package/dist/errors/youcanpay.error.d.ts +16 -0
  21. package/dist/errors/youcanpay.error.js +32 -0
  22. package/dist/errors/youcanpay.error.js.map +1 -0
  23. package/dist/index.d.ts +12 -0
  24. package/dist/index.js +57 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/interfaces/index.d.ts +5 -0
  27. package/dist/interfaces/index.js +22 -0
  28. package/dist/interfaces/index.js.map +1 -0
  29. package/dist/interfaces/options.interface.d.ts +13 -0
  30. package/dist/interfaces/options.interface.js +3 -0
  31. package/dist/interfaces/options.interface.js.map +1 -0
  32. package/dist/interfaces/payment.interface.d.ts +22 -0
  33. package/dist/interfaces/payment.interface.js +3 -0
  34. package/dist/interfaces/payment.interface.js.map +1 -0
  35. package/dist/interfaces/token.interface.d.ts +26 -0
  36. package/dist/interfaces/token.interface.js +3 -0
  37. package/dist/interfaces/token.interface.js.map +1 -0
  38. package/dist/interfaces/transaction.interface.d.ts +10 -0
  39. package/dist/interfaces/transaction.interface.js +3 -0
  40. package/dist/interfaces/transaction.interface.js.map +1 -0
  41. package/dist/interfaces/webhook.interface.d.ts +16 -0
  42. package/dist/interfaces/webhook.interface.js +10 -0
  43. package/dist/interfaces/webhook.interface.js.map +1 -0
  44. package/dist/logging/index.d.ts +3 -0
  45. package/dist/logging/index.js +20 -0
  46. package/dist/logging/index.js.map +1 -0
  47. package/dist/logging/interfaces.d.ts +22 -0
  48. package/dist/logging/interfaces.js +3 -0
  49. package/dist/logging/interfaces.js.map +1 -0
  50. package/dist/logging/logger.d.ts +6 -0
  51. package/dist/logging/logger.js +37 -0
  52. package/dist/logging/logger.js.map +1 -0
  53. package/dist/logging/sanitizer.d.ts +1 -0
  54. package/dist/logging/sanitizer.js +55 -0
  55. package/dist/logging/sanitizer.js.map +1 -0
  56. package/dist/nestjs/decorators.d.ts +2 -0
  57. package/dist/nestjs/decorators.js +8 -0
  58. package/dist/nestjs/decorators.js.map +1 -0
  59. package/dist/nestjs/guards/index.d.ts +1 -0
  60. package/dist/nestjs/guards/index.js +9 -0
  61. package/dist/nestjs/guards/index.js.map +1 -0
  62. package/dist/nestjs/guards/webhook.guard.d.ts +16 -0
  63. package/dist/nestjs/guards/webhook.guard.js +59 -0
  64. package/dist/nestjs/guards/webhook.guard.js.map +1 -0
  65. package/dist/nestjs/index.d.ts +5 -0
  66. package/dist/nestjs/index.js +22 -0
  67. package/dist/nestjs/index.js.map +1 -0
  68. package/dist/nestjs/pipes/index.d.ts +1 -0
  69. package/dist/nestjs/pipes/index.js +7 -0
  70. package/dist/nestjs/pipes/index.js.map +1 -0
  71. package/dist/nestjs/pipes/webhook.pipe.d.ts +6 -0
  72. package/dist/nestjs/pipes/webhook.pipe.js +34 -0
  73. package/dist/nestjs/pipes/webhook.pipe.js.map +1 -0
  74. package/dist/nestjs/youcanpay.module.d.ts +6 -0
  75. package/dist/nestjs/youcanpay.module.js +48 -0
  76. package/dist/nestjs/youcanpay.module.js.map +1 -0
  77. package/dist/nestjs/youcanpay.service.d.ts +5 -0
  78. package/dist/nestjs/youcanpay.service.js +30 -0
  79. package/dist/nestjs/youcanpay.service.js.map +1 -0
  80. package/dist/security/index.d.ts +2 -0
  81. package/dist/security/index.js +24 -0
  82. package/dist/security/index.js.map +1 -0
  83. package/dist/security/validators.d.ts +37 -0
  84. package/dist/security/validators.js +183 -0
  85. package/dist/security/validators.js.map +1 -0
  86. package/dist/security/webhook.d.ts +80 -0
  87. package/dist/security/webhook.js +146 -0
  88. package/dist/security/webhook.js.map +1 -0
  89. package/dist/tsconfig.build.tsbuildinfo +1 -0
  90. package/dist/tsconfig.tsbuildinfo +1 -0
  91. package/package.json +49 -0
@@ -0,0 +1,16 @@
1
+ export declare enum WebhookEventType {
2
+ PAYMENT_SUCCESS = "payment.success",
3
+ PAYMENT_FAILED = "payment.failed",
4
+ REFUND_SUCCESS = "refund.success"
5
+ }
6
+ export interface WebhookPayload {
7
+ id: string;
8
+ event: WebhookEventType | string;
9
+ transaction_id: string;
10
+ order_id: string;
11
+ amount: number;
12
+ currency: string;
13
+ status: 'success' | 'failed' | 'refunded';
14
+ metadata?: Record<string, string>;
15
+ created_at: string;
16
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebhookEventType = void 0;
4
+ var WebhookEventType;
5
+ (function (WebhookEventType) {
6
+ WebhookEventType["PAYMENT_SUCCESS"] = "payment.success";
7
+ WebhookEventType["PAYMENT_FAILED"] = "payment.failed";
8
+ WebhookEventType["REFUND_SUCCESS"] = "refund.success";
9
+ })(WebhookEventType || (exports.WebhookEventType = WebhookEventType = {}));
10
+ //# sourceMappingURL=webhook.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.interface.js","sourceRoot":"","sources":["../../src/interfaces/webhook.interface.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,uDAAmC,CAAA;IACnC,qDAAiC,CAAA;IACjC,qDAAiC,CAAA;AACnC,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B"}
@@ -0,0 +1,3 @@
1
+ export * from './interfaces';
2
+ export * from './sanitizer';
3
+ export * from './logger';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./interfaces"), exports);
18
+ __exportStar(require("./sanitizer"), exports);
19
+ __exportStar(require("./logger"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B;AAC5B,2CAAyB"}
@@ -0,0 +1,22 @@
1
+ export type LogAction = 'createToken' | 'payWithCreditCard' | 'payWithCashPlus' | 'webhook' | 'getTransaction';
2
+ export type LogStatus = 'success' | 'error';
3
+ export type LogStorage = 'database' | 'custom' | 'none';
4
+ export interface YouCanPayLogEntry {
5
+ id: string;
6
+ action: LogAction;
7
+ request: Record<string, unknown>;
8
+ response?: Record<string, unknown>;
9
+ status: LogStatus;
10
+ durationMs?: number;
11
+ metadata?: Record<string, unknown>;
12
+ createdAt: Date;
13
+ }
14
+ export interface YouCanPayLogRepository {
15
+ create(data: Omit<YouCanPayLogEntry, 'id'>): Promise<YouCanPayLogEntry>;
16
+ }
17
+ export interface YouCanPayLoggingOptions {
18
+ enabled: boolean;
19
+ storage?: LogStorage;
20
+ handler?: (log: YouCanPayLogEntry) => Promise<void>;
21
+ repository?: YouCanPayLogRepository;
22
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/logging/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { YouCanPayLoggingOptions, LogAction, LogStatus } from './interfaces';
2
+ export declare class YouCanPayLogger {
3
+ private readonly options?;
4
+ constructor(options?: YouCanPayLoggingOptions | undefined);
5
+ log(action: LogAction, request: Record<string, unknown>, response: Record<string, unknown> | undefined, status: LogStatus, durationMs?: number, metadata?: Record<string, unknown>): Promise<void>;
6
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YouCanPayLogger = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const sanitizer_1 = require("./sanitizer");
6
+ class YouCanPayLogger {
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ async log(action, request, response, status, durationMs, metadata) {
11
+ if (!this.options?.enabled) {
12
+ return;
13
+ }
14
+ const logEntry = {
15
+ id: (0, uuid_1.v4)(),
16
+ action,
17
+ request: (0, sanitizer_1.sanitizeData)(request),
18
+ response: response ? (0, sanitizer_1.sanitizeData)(response) : undefined,
19
+ status,
20
+ durationMs,
21
+ metadata,
22
+ createdAt: new Date(),
23
+ };
24
+ try {
25
+ if (this.options.storage === 'custom' && this.options.handler) {
26
+ await this.options.handler(logEntry);
27
+ }
28
+ else if (this.options.storage === 'database' && this.options.repository) {
29
+ await this.options.repository.create(logEntry);
30
+ }
31
+ }
32
+ catch {
33
+ }
34
+ }
35
+ }
36
+ exports.YouCanPayLogger = YouCanPayLogger;
37
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAEpC,2CAA2C;AAE3C,MAAa,eAAe;IAC1B,YAA6B,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;IAAG,CAAC;IAElE,KAAK,CAAC,GAAG,CACP,MAAiB,EACjB,OAAgC,EAChC,QAA6C,EAC7C,MAAiB,EACjB,UAAmB,EACnB,QAAkC;QAElC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAsB;YAClC,EAAE,EAAE,IAAA,SAAM,GAAE;YACZ,MAAM;YACN,OAAO,EAAE,IAAA,wBAAY,EAAC,OAAO,CAAC;YAC9B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAA,wBAAY,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACvD,MAAM;YACN,UAAU;YACV,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC9D,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1E,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;CACF;AApCD,0CAoCC"}
@@ -0,0 +1 @@
1
+ export declare function sanitizeData<T extends Record<string, unknown>>(data: T): T;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeData = sanitizeData;
4
+ const SENSITIVE_FIELDS = ['privateKey', 'password', 'pri_key'];
5
+ const CARD_FIELDS = ['creditCard', 'credit_card', 'cardNumber', 'card_number'];
6
+ const CVV_FIELDS = ['cvv', 'cvc', 'securityCode', 'security_code'];
7
+ function isSensitiveField(key) {
8
+ return SENSITIVE_FIELDS.includes(key);
9
+ }
10
+ function isCardField(key) {
11
+ return CARD_FIELDS.includes(key);
12
+ }
13
+ function isCvvField(key) {
14
+ return CVV_FIELDS.includes(key);
15
+ }
16
+ function maskCardNumber(value) {
17
+ if (value.length < 4)
18
+ return '****';
19
+ const lastFour = value.slice(-4);
20
+ const masked = '*'.repeat(value.length - 4);
21
+ return masked + lastFour;
22
+ }
23
+ function sanitizeData(data) {
24
+ if (data === null || data === undefined) {
25
+ return data;
26
+ }
27
+ const result = {};
28
+ for (const [key, value] of Object.entries(data)) {
29
+ if (value === null || value === undefined) {
30
+ result[key] = value;
31
+ }
32
+ else if (isSensitiveField(key)) {
33
+ result[key] = '[REDACTED]';
34
+ }
35
+ else if (isCardField(key) && typeof value === 'string') {
36
+ result[key] = maskCardNumber(value);
37
+ }
38
+ else if (isCvvField(key)) {
39
+ result[key] = '***';
40
+ }
41
+ else if (typeof value === 'object' && !Array.isArray(value)) {
42
+ result[key] = sanitizeData(value);
43
+ }
44
+ else if (Array.isArray(value)) {
45
+ result[key] = value.map((item) => typeof item === 'object' && item !== null
46
+ ? sanitizeData(item)
47
+ : item);
48
+ }
49
+ else {
50
+ result[key] = value;
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/logging/sanitizer.ts"],"names":[],"mappings":";;AA2BA,oCA8BC;AAzDD,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AACxE,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,CAAU,CAAC;AACxF,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,CAAU,CAAC;AAM5E,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAqB,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAgB,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAe,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED,SAAgB,YAAY,CAAoC,IAAO;IACrE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC7B,CAAC;aAAM,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAgC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBACvC,CAAC,CAAC,YAAY,CAAC,IAA+B,CAAC;gBAC/C,CAAC,CAAC,IAAI,CACT,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Inject } from '@nestjs/common';
2
+ export declare const InjectYouCanPay: () => ReturnType<typeof Inject>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InjectYouCanPay = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const youcanpay_service_1 = require("./youcanpay.service");
6
+ const InjectYouCanPay = () => (0, common_1.Inject)(youcanpay_service_1.YouCanPayService);
7
+ exports.InjectYouCanPay = InjectYouCanPay;
8
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/nestjs/decorators.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,2DAAuD;AAEhD,MAAM,eAAe,GAAG,GAA8B,EAAE,CAAC,IAAA,eAAM,EAAC,oCAAgB,CAAC,CAAC;AAA5E,QAAA,eAAe,mBAA6D"}
@@ -0,0 +1 @@
1
+ export { WebhookGuard, WebhookOptions, WEBHOOK_SECRET_KEY, WEBHOOK_OPTIONS_KEY, type WebhookGuardOptions, } from './webhook.guard';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WEBHOOK_OPTIONS_KEY = exports.WEBHOOK_SECRET_KEY = exports.WebhookOptions = exports.WebhookGuard = void 0;
4
+ var webhook_guard_1 = require("./webhook.guard");
5
+ Object.defineProperty(exports, "WebhookGuard", { enumerable: true, get: function () { return webhook_guard_1.WebhookGuard; } });
6
+ Object.defineProperty(exports, "WebhookOptions", { enumerable: true, get: function () { return webhook_guard_1.WebhookOptions; } });
7
+ Object.defineProperty(exports, "WEBHOOK_SECRET_KEY", { enumerable: true, get: function () { return webhook_guard_1.WEBHOOK_SECRET_KEY; } });
8
+ Object.defineProperty(exports, "WEBHOOK_OPTIONS_KEY", { enumerable: true, get: function () { return webhook_guard_1.WEBHOOK_OPTIONS_KEY; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nestjs/guards/index.ts"],"names":[],"mappings":";;;AAAA,iDAMyB;AALvB,6GAAA,YAAY,OAAA;AACZ,+GAAA,cAAc,OAAA;AACd,mHAAA,kBAAkB,OAAA;AAClB,oHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,16 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ export declare const WEBHOOK_SECRET_KEY = "YOUCANPAY_WEBHOOK_SECRET";
4
+ export declare const WEBHOOK_OPTIONS_KEY = "youcanpay:webhook:options";
5
+ export interface WebhookGuardOptions {
6
+ secretParam?: string;
7
+ signatureHeader?: string;
8
+ secret?: string;
9
+ }
10
+ export declare class WebhookGuard implements CanActivate {
11
+ private readonly webhookSecret;
12
+ private readonly reflector;
13
+ constructor(webhookSecret: string, reflector: Reflector);
14
+ canActivate(context: ExecutionContext): boolean;
15
+ }
16
+ export declare function WebhookOptions(options: WebhookGuardOptions): MethodDecorator;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.WebhookGuard = exports.WEBHOOK_OPTIONS_KEY = exports.WEBHOOK_SECRET_KEY = void 0;
16
+ exports.WebhookOptions = WebhookOptions;
17
+ const common_1 = require("@nestjs/common");
18
+ const core_1 = require("@nestjs/core");
19
+ const webhook_1 = require("../../security/webhook");
20
+ exports.WEBHOOK_SECRET_KEY = 'YOUCANPAY_WEBHOOK_SECRET';
21
+ exports.WEBHOOK_OPTIONS_KEY = 'youcanpay:webhook:options';
22
+ let WebhookGuard = class WebhookGuard {
23
+ constructor(webhookSecret, reflector) {
24
+ this.webhookSecret = webhookSecret;
25
+ this.reflector = reflector;
26
+ }
27
+ canActivate(context) {
28
+ const request = context.switchToHttp().getRequest();
29
+ const options = this.reflector.get(exports.WEBHOOK_OPTIONS_KEY, context.getHandler()) || {};
30
+ const secret = options.secret || this.webhookSecret;
31
+ if (!secret) {
32
+ throw new common_1.UnauthorizedException('Webhook secret not configured');
33
+ }
34
+ const isValid = (0, webhook_1.verifyWebhookSecret)({
35
+ secret,
36
+ query: request.query,
37
+ headers: request.headers,
38
+ secretParam: options.secretParam,
39
+ signatureHeader: options.signatureHeader,
40
+ });
41
+ if (!isValid) {
42
+ throw new common_1.UnauthorizedException('Invalid webhook signature');
43
+ }
44
+ return true;
45
+ }
46
+ };
47
+ exports.WebhookGuard = WebhookGuard;
48
+ exports.WebhookGuard = WebhookGuard = __decorate([
49
+ (0, common_1.Injectable)(),
50
+ __param(0, (0, common_1.Inject)(exports.WEBHOOK_SECRET_KEY)),
51
+ __metadata("design:paramtypes", [String, core_1.Reflector])
52
+ ], WebhookGuard);
53
+ function WebhookOptions(options) {
54
+ return (target, propertyKey, descriptor) => {
55
+ Reflect.defineMetadata(exports.WEBHOOK_OPTIONS_KEY, options, descriptor.value);
56
+ return descriptor;
57
+ };
58
+ }
59
+ //# sourceMappingURL=webhook.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.guard.js","sourceRoot":"","sources":["../../../src/nestjs/guards/webhook.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA6FA,wCAKC;AAlGD,2CAMwB;AACxB,uCAAyC;AACzC,oDAA6D;AAEhD,QAAA,kBAAkB,GAAG,0BAA0B,CAAC;AAChD,QAAA,mBAAmB,GAAG,2BAA2B,CAAC;AAkCxD,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAC+C,aAAqB,EACjD,SAAoB;QADQ,kBAAa,GAAb,aAAa,CAAQ;QACjD,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ,WAAW,CAAC,OAAyB;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAGpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAChC,2BAAmB,EACnB,OAAO,CAAC,UAAU,EAAE,CACrB,IAAI,EAAE,CAAC;QAER,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,8BAAqB,CAAC,+BAA+B,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,6BAAmB,EAAC;YAClC,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAnCY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,0BAAkB,CAAC,CAAA;6CACC,gBAAS;GAH5B,YAAY,CAmCxB;AAaD,SAAgB,cAAc,CAAC,OAA4B;IACzD,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;QACzC,OAAO,CAAC,cAAc,CAAC,2BAAmB,EAAE,OAAO,EAAE,UAAU,CAAC,KAAe,CAAC,CAAC;QACjF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './youcanpay.module';
2
+ export * from './youcanpay.service';
3
+ export * from './decorators';
4
+ export * from './guards';
5
+ export * from './pipes';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./youcanpay.module"), exports);
18
+ __exportStar(require("./youcanpay.service"), exports);
19
+ __exportStar(require("./decorators"), exports);
20
+ __exportStar(require("./guards"), exports);
21
+ __exportStar(require("./pipes"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,sDAAoC;AACpC,+CAA6B;AAC7B,2CAAyB;AACzB,0CAAwB"}
@@ -0,0 +1 @@
1
+ export { ParseWebhookPipe, ParsedWebhook } from './webhook.pipe';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParsedWebhook = exports.ParseWebhookPipe = void 0;
4
+ var webhook_pipe_1 = require("./webhook.pipe");
5
+ Object.defineProperty(exports, "ParseWebhookPipe", { enumerable: true, get: function () { return webhook_pipe_1.ParseWebhookPipe; } });
6
+ Object.defineProperty(exports, "ParsedWebhook", { enumerable: true, get: function () { return webhook_pipe_1.ParsedWebhook; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nestjs/pipes/index.ts"],"names":[],"mappings":";;;AAAA,+CAAiE;AAAxD,gHAAA,gBAAgB,OAAA;AAAE,6GAAA,aAAa,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { PipeTransform } from '@nestjs/common';
2
+ import { ParsedWebhookPayload } from '../../security/webhook';
3
+ export declare class ParseWebhookPipe implements PipeTransform<unknown, ParsedWebhookPayload> {
4
+ transform(value: unknown): ParsedWebhookPayload;
5
+ }
6
+ export declare function ParsedWebhook(): ParameterDecorator;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ParseWebhookPipe = void 0;
10
+ exports.ParsedWebhook = ParsedWebhook;
11
+ const common_1 = require("@nestjs/common");
12
+ const webhook_1 = require("../../security/webhook");
13
+ let ParseWebhookPipe = class ParseWebhookPipe {
14
+ transform(value) {
15
+ try {
16
+ return (0, webhook_1.parseWebhookPayload)(value);
17
+ }
18
+ catch (error) {
19
+ if (error instanceof webhook_1.WebhookParseError) {
20
+ throw new common_1.BadRequestException(error.message);
21
+ }
22
+ throw new common_1.BadRequestException('Failed to parse webhook payload');
23
+ }
24
+ }
25
+ };
26
+ exports.ParseWebhookPipe = ParseWebhookPipe;
27
+ exports.ParseWebhookPipe = ParseWebhookPipe = __decorate([
28
+ (0, common_1.Injectable)()
29
+ ], ParseWebhookPipe);
30
+ function ParsedWebhook() {
31
+ return (target, propertyKey, parameterIndex) => {
32
+ };
33
+ }
34
+ //# sourceMappingURL=webhook.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.pipe.js","sourceRoot":"","sources":["../../../src/nestjs/pipes/webhook.pipe.ts"],"names":[],"mappings":";;;;;;;;;AAyCA,sCAKC;AA9CD,2CAAgF;AAChF,oDAAsG;AAe/F,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,IAAA,6BAAmB,EAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,2BAAiB,EAAE,CAAC;gBACvC,MAAM,IAAI,4BAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,IAAI,4BAAmB,CAAC,iCAAiC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF,CAAA;AAXY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAW5B;AAcD,SAAgB,aAAa;IAC3B,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;IAG/C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { YouCanPayOptions, YouCanPayAsyncOptions } from '../interfaces';
3
+ export declare class YouCanPayModule {
4
+ static forRoot(options: YouCanPayOptions): DynamicModule;
5
+ static forRootAsync(asyncOptions: YouCanPayAsyncOptions): DynamicModule;
6
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var YouCanPayModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.YouCanPayModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const youcanpay_service_1 = require("./youcanpay.service");
13
+ const constants_1 = require("../constants");
14
+ let YouCanPayModule = YouCanPayModule_1 = class YouCanPayModule {
15
+ static forRoot(options) {
16
+ return {
17
+ module: YouCanPayModule_1,
18
+ providers: [
19
+ {
20
+ provide: constants_1.YOUCANPAY_OPTIONS,
21
+ useValue: options,
22
+ },
23
+ youcanpay_service_1.YouCanPayService,
24
+ ],
25
+ exports: [youcanpay_service_1.YouCanPayService],
26
+ global: true,
27
+ };
28
+ }
29
+ static forRootAsync(asyncOptions) {
30
+ const optionsProvider = {
31
+ provide: constants_1.YOUCANPAY_OPTIONS,
32
+ useFactory: asyncOptions.useFactory,
33
+ inject: (asyncOptions.inject ?? []),
34
+ };
35
+ return {
36
+ module: YouCanPayModule_1,
37
+ imports: (asyncOptions.imports ?? []),
38
+ providers: [optionsProvider, youcanpay_service_1.YouCanPayService],
39
+ exports: [youcanpay_service_1.YouCanPayService],
40
+ global: true,
41
+ };
42
+ }
43
+ };
44
+ exports.YouCanPayModule = YouCanPayModule;
45
+ exports.YouCanPayModule = YouCanPayModule = YouCanPayModule_1 = __decorate([
46
+ (0, common_1.Module)({})
47
+ ], YouCanPayModule);
48
+ //# sourceMappingURL=youcanpay.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youcanpay.module.js","sourceRoot":"","sources":["../../src/nestjs/youcanpay.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAiE;AACjE,2DAAuD;AAEvD,4CAAiD;AAG1C,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,OAAO,CAAC,OAAyB;QACtC,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,6BAAiB;oBAC1B,QAAQ,EAAE,OAAO;iBAClB;gBACD,oCAAgB;aACjB;YACD,OAAO,EAAE,CAAC,oCAAgB,CAAC;YAC3B,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,YAAmC;QACrD,MAAM,eAAe,GAAa;YAChC,OAAO,EAAE,6BAAiB;YAC1B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,CAAU;SAC7C,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAU;YAC9C,SAAS,EAAE,CAAC,eAAe,EAAE,oCAAgB,CAAC;YAC9C,OAAO,EAAE,CAAC,oCAAgB,CAAC;YAC3B,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;CACF,CAAA;AA/BY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CA+B3B"}
@@ -0,0 +1,5 @@
1
+ import { YouCanPayClient } from '../client';
2
+ import { YouCanPayOptions } from '../interfaces';
3
+ export declare class YouCanPayService extends YouCanPayClient {
4
+ constructor(options: YouCanPayOptions);
5
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.YouCanPayService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const client_1 = require("../client");
18
+ const constants_1 = require("../constants");
19
+ let YouCanPayService = class YouCanPayService extends client_1.YouCanPayClient {
20
+ constructor(options) {
21
+ super(options);
22
+ }
23
+ };
24
+ exports.YouCanPayService = YouCanPayService;
25
+ exports.YouCanPayService = YouCanPayService = __decorate([
26
+ (0, common_1.Injectable)(),
27
+ __param(0, (0, common_1.Inject)(constants_1.YOUCANPAY_OPTIONS)),
28
+ __metadata("design:paramtypes", [Object])
29
+ ], YouCanPayService);
30
+ //# sourceMappingURL=youcanpay.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youcanpay.service.js","sourceRoot":"","sources":["../../src/nestjs/youcanpay.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,sCAA4C;AAE5C,4CAAiD;AAG1C,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,wBAAe;IACnD,YAAuC,OAAyB;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF,CAAA;AAJY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,6BAAiB,CAAC,CAAA;;GAD3B,gBAAgB,CAI5B"}
@@ -0,0 +1,2 @@
1
+ export { parseWebhookPayload, verifyWebhookSecret, verifyWebhookHMAC, createWebhookSignature, WebhookParseError, WebhookVerifyError, type YouCanPayRawWebhook, type ParsedWebhookPayload, type WebhookVerifyOptions, } from './webhook';
2
+ export { validateAmount, validateCurrency, validateRedirectURL, validateOrderId, validateIP, validateEmail, validatePaymentInput, sanitizeString, toCentimes, fromCentimes, formatAmount, SUPPORTED_CURRENCIES, type SupportedCurrency, type ValidationResult, type AmountValidationOptions, type URLValidationOptions, } from './validators';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_CURRENCIES = exports.formatAmount = exports.fromCentimes = exports.toCentimes = exports.sanitizeString = exports.validatePaymentInput = exports.validateEmail = exports.validateIP = exports.validateOrderId = exports.validateRedirectURL = exports.validateCurrency = exports.validateAmount = exports.WebhookVerifyError = exports.WebhookParseError = exports.createWebhookSignature = exports.verifyWebhookHMAC = exports.verifyWebhookSecret = exports.parseWebhookPayload = void 0;
4
+ var webhook_1 = require("./webhook");
5
+ Object.defineProperty(exports, "parseWebhookPayload", { enumerable: true, get: function () { return webhook_1.parseWebhookPayload; } });
6
+ Object.defineProperty(exports, "verifyWebhookSecret", { enumerable: true, get: function () { return webhook_1.verifyWebhookSecret; } });
7
+ Object.defineProperty(exports, "verifyWebhookHMAC", { enumerable: true, get: function () { return webhook_1.verifyWebhookHMAC; } });
8
+ Object.defineProperty(exports, "createWebhookSignature", { enumerable: true, get: function () { return webhook_1.createWebhookSignature; } });
9
+ Object.defineProperty(exports, "WebhookParseError", { enumerable: true, get: function () { return webhook_1.WebhookParseError; } });
10
+ Object.defineProperty(exports, "WebhookVerifyError", { enumerable: true, get: function () { return webhook_1.WebhookVerifyError; } });
11
+ var validators_1 = require("./validators");
12
+ Object.defineProperty(exports, "validateAmount", { enumerable: true, get: function () { return validators_1.validateAmount; } });
13
+ Object.defineProperty(exports, "validateCurrency", { enumerable: true, get: function () { return validators_1.validateCurrency; } });
14
+ Object.defineProperty(exports, "validateRedirectURL", { enumerable: true, get: function () { return validators_1.validateRedirectURL; } });
15
+ Object.defineProperty(exports, "validateOrderId", { enumerable: true, get: function () { return validators_1.validateOrderId; } });
16
+ Object.defineProperty(exports, "validateIP", { enumerable: true, get: function () { return validators_1.validateIP; } });
17
+ Object.defineProperty(exports, "validateEmail", { enumerable: true, get: function () { return validators_1.validateEmail; } });
18
+ Object.defineProperty(exports, "validatePaymentInput", { enumerable: true, get: function () { return validators_1.validatePaymentInput; } });
19
+ Object.defineProperty(exports, "sanitizeString", { enumerable: true, get: function () { return validators_1.sanitizeString; } });
20
+ Object.defineProperty(exports, "toCentimes", { enumerable: true, get: function () { return validators_1.toCentimes; } });
21
+ Object.defineProperty(exports, "fromCentimes", { enumerable: true, get: function () { return validators_1.fromCentimes; } });
22
+ Object.defineProperty(exports, "formatAmount", { enumerable: true, get: function () { return validators_1.formatAmount; } });
23
+ Object.defineProperty(exports, "SUPPORTED_CURRENCIES", { enumerable: true, get: function () { return validators_1.SUPPORTED_CURRENCIES; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":";;;AACA,qCAUmB;AATjB,8GAAA,mBAAmB,OAAA;AACnB,8GAAA,mBAAmB,OAAA;AACnB,4GAAA,iBAAiB,OAAA;AACjB,iHAAA,sBAAsB,OAAA;AACtB,4GAAA,iBAAiB,OAAA;AACjB,6GAAA,kBAAkB,OAAA;AAOpB,2CAiBsB;AAhBpB,4GAAA,cAAc,OAAA;AACd,8GAAA,gBAAgB,OAAA;AAChB,iHAAA,mBAAmB,OAAA;AACnB,6GAAA,eAAe,OAAA;AACf,wGAAA,UAAU,OAAA;AACV,2GAAA,aAAa,OAAA;AACb,kHAAA,oBAAoB,OAAA;AACpB,4GAAA,cAAc,OAAA;AACd,wGAAA,UAAU,OAAA;AACV,0GAAA,YAAY,OAAA;AACZ,0GAAA,YAAY,OAAA;AACZ,kHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,37 @@
1
+ export declare const SUPPORTED_CURRENCIES: readonly ["MAD", "USD", "EUR"];
2
+ export type SupportedCurrency = typeof SUPPORTED_CURRENCIES[number];
3
+ export interface ValidationResult {
4
+ valid: boolean;
5
+ error?: string;
6
+ }
7
+ export interface AmountValidationOptions {
8
+ min?: number;
9
+ max?: number;
10
+ currency?: string;
11
+ }
12
+ export interface URLValidationOptions {
13
+ protocols?: string[];
14
+ allowedDomains?: string[];
15
+ blockedDomains?: string[];
16
+ allowLocalhost?: boolean;
17
+ requireTLD?: boolean;
18
+ }
19
+ export declare function validateAmount(amount: unknown, options?: AmountValidationOptions): ValidationResult;
20
+ export declare function validateCurrency(currency: unknown): ValidationResult;
21
+ export declare function validateRedirectURL(url: unknown, options?: URLValidationOptions): ValidationResult;
22
+ export declare function validateOrderId(orderId: unknown): ValidationResult;
23
+ export declare function validateIP(ip: unknown): ValidationResult;
24
+ export declare function validateEmail(email: unknown): ValidationResult;
25
+ export declare function validatePaymentInput(input: {
26
+ amount: unknown;
27
+ currency: unknown;
28
+ orderId?: unknown;
29
+ customerIp?: unknown;
30
+ successUrl?: unknown;
31
+ errorUrl?: unknown;
32
+ customerEmail?: unknown;
33
+ }): ValidationResult;
34
+ export declare function sanitizeString(input: string): string;
35
+ export declare function toCentimes(amount: number): number;
36
+ export declare function fromCentimes(centimes: number): number;
37
+ export declare function formatAmount(centimes: number, currency: string): string;