@plural_pinelabs/mpp-seller-sdk 0.1.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 (110) hide show
  1. package/README.md +1 -0
  2. package/dist/config/environments.d.ts +8 -0
  3. package/dist/config/environments.d.ts.map +1 -0
  4. package/dist/config/environments.js +11 -0
  5. package/dist/config/environments.js.map +1 -0
  6. package/dist/config/index.d.ts +2 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +8 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/index.d.ts +26 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +44 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/middleware/generic.d.ts +29 -0
  15. package/dist/middleware/generic.d.ts.map +1 -0
  16. package/dist/middleware/generic.js +161 -0
  17. package/dist/middleware/generic.js.map +1 -0
  18. package/dist/middleware/index.d.ts +3 -0
  19. package/dist/middleware/index.d.ts.map +1 -0
  20. package/dist/middleware/index.js +6 -0
  21. package/dist/middleware/index.js.map +1 -0
  22. package/dist/server/auth-manager.d.ts +19 -0
  23. package/dist/server/auth-manager.d.ts.map +1 -0
  24. package/dist/server/auth-manager.js +110 -0
  25. package/dist/server/auth-manager.js.map +1 -0
  26. package/dist/server/capture-client.d.ts +13 -0
  27. package/dist/server/capture-client.d.ts.map +1 -0
  28. package/dist/server/capture-client.js +134 -0
  29. package/dist/server/capture-client.js.map +1 -0
  30. package/dist/server/challenge-generator.d.ts +10 -0
  31. package/dist/server/challenge-generator.d.ts.map +1 -0
  32. package/dist/server/challenge-generator.js +60 -0
  33. package/dist/server/challenge-generator.js.map +1 -0
  34. package/dist/server/credential-verifier.d.ts +10 -0
  35. package/dist/server/credential-verifier.d.ts.map +1 -0
  36. package/dist/server/credential-verifier.js +142 -0
  37. package/dist/server/credential-verifier.js.map +1 -0
  38. package/dist/server/grant-token-verifier.d.ts +15 -0
  39. package/dist/server/grant-token-verifier.d.ts.map +1 -0
  40. package/dist/server/grant-token-verifier.js +155 -0
  41. package/dist/server/grant-token-verifier.js.map +1 -0
  42. package/dist/server/index.d.ts +8 -0
  43. package/dist/server/index.d.ts.map +1 -0
  44. package/dist/server/index.js +22 -0
  45. package/dist/server/index.js.map +1 -0
  46. package/dist/server/plural-mpp.d.ts +26 -0
  47. package/dist/server/plural-mpp.d.ts.map +1 -0
  48. package/dist/server/plural-mpp.js +50 -0
  49. package/dist/server/plural-mpp.js.map +1 -0
  50. package/dist/server/receipt-builder.d.ts +5 -0
  51. package/dist/server/receipt-builder.d.ts.map +1 -0
  52. package/dist/server/receipt-builder.js +45 -0
  53. package/dist/server/receipt-builder.js.map +1 -0
  54. package/dist/types/auth.d.ts +12 -0
  55. package/dist/types/auth.d.ts.map +1 -0
  56. package/dist/types/auth.js +3 -0
  57. package/dist/types/auth.js.map +1 -0
  58. package/dist/types/capture.d.ts +51 -0
  59. package/dist/types/capture.d.ts.map +1 -0
  60. package/dist/types/capture.js +3 -0
  61. package/dist/types/capture.js.map +1 -0
  62. package/dist/types/challenge.d.ts +27 -0
  63. package/dist/types/challenge.d.ts.map +1 -0
  64. package/dist/types/challenge.js +3 -0
  65. package/dist/types/challenge.js.map +1 -0
  66. package/dist/types/config.d.ts +34 -0
  67. package/dist/types/config.d.ts.map +1 -0
  68. package/dist/types/config.js +3 -0
  69. package/dist/types/config.js.map +1 -0
  70. package/dist/types/credential.d.ts +25 -0
  71. package/dist/types/credential.d.ts.map +1 -0
  72. package/dist/types/credential.js +3 -0
  73. package/dist/types/credential.js.map +1 -0
  74. package/dist/types/errors.d.ts +30 -0
  75. package/dist/types/errors.d.ts.map +1 -0
  76. package/dist/types/errors.js +25 -0
  77. package/dist/types/errors.js.map +1 -0
  78. package/dist/types/grantex.d.ts +27 -0
  79. package/dist/types/grantex.d.ts.map +1 -0
  80. package/dist/types/grantex.js +3 -0
  81. package/dist/types/grantex.js.map +1 -0
  82. package/dist/types/index.d.ts +9 -0
  83. package/dist/types/index.d.ts.map +1 -0
  84. package/dist/types/index.js +6 -0
  85. package/dist/types/index.js.map +1 -0
  86. package/dist/utils/base64url.d.ts +6 -0
  87. package/dist/utils/base64url.d.ts.map +1 -0
  88. package/dist/utils/base64url.js +25 -0
  89. package/dist/utils/base64url.js.map +1 -0
  90. package/dist/utils/errors.d.ts +16 -0
  91. package/dist/utils/errors.d.ts.map +1 -0
  92. package/dist/utils/errors.js +46 -0
  93. package/dist/utils/errors.js.map +1 -0
  94. package/dist/utils/fetch-helpers.d.ts +19 -0
  95. package/dist/utils/fetch-helpers.d.ts.map +1 -0
  96. package/dist/utils/fetch-helpers.js +108 -0
  97. package/dist/utils/fetch-helpers.js.map +1 -0
  98. package/dist/utils/hmac-sig.d.ts +3 -0
  99. package/dist/utils/hmac-sig.d.ts.map +1 -0
  100. package/dist/utils/hmac-sig.js +13 -0
  101. package/dist/utils/hmac-sig.js.map +1 -0
  102. package/dist/utils/index.d.ts +7 -0
  103. package/dist/utils/index.d.ts.map +1 -0
  104. package/dist/utils/index.js +21 -0
  105. package/dist/utils/index.js.map +1 -0
  106. package/dist/utils/validation.d.ts +3 -0
  107. package/dist/utils/validation.d.ts.map +1 -0
  108. package/dist/utils/validation.js +27 -0
  109. package/dist/utils/validation.js.map +1 -0
  110. package/package.json +29 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # pinelabs-online-seller-SDK-TypeScript
@@ -0,0 +1,8 @@
1
+ /** Plural MPP environment base URLs. */
2
+ export declare const MppEnvironment: {
3
+ readonly SANDBOX: "https://pluraluat.v2.pinepg.in";
4
+ readonly PRODUCTION: "https://api.pluralpay.in";
5
+ };
6
+ export declare const DEFAULT_BASE_URL: string;
7
+ export declare const DEFAULT_REALM: string;
8
+ //# sourceMappingURL=environments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../../src/config/environments.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,eAAO,MAAM,gBAAgB,EAAE,MAAkC,CAAC;AAClE,eAAO,MAAM,aAAa,EAAE,MAAkC,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_REALM = exports.DEFAULT_BASE_URL = exports.MppEnvironment = void 0;
4
+ /** Plural MPP environment base URLs. */
5
+ exports.MppEnvironment = {
6
+ SANDBOX: "https://pluraluat.v2.pinepg.in",
7
+ PRODUCTION: "https://api.pluralpay.in",
8
+ };
9
+ exports.DEFAULT_BASE_URL = exports.MppEnvironment.PRODUCTION;
10
+ exports.DEFAULT_REALM = exports.MppEnvironment.PRODUCTION;
11
+ //# sourceMappingURL=environments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/config/environments.ts"],"names":[],"mappings":";;;AAAA,wCAAwC;AAC3B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gCAAgC;IACzC,UAAU,EAAE,0BAA0B;CAC9B,CAAC;AAEE,QAAA,gBAAgB,GAAW,sBAAc,CAAC,UAAU,CAAC;AACrD,QAAA,aAAa,GAAW,sBAAc,CAAC,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { MppEnvironment, DEFAULT_BASE_URL, DEFAULT_REALM } from "./environments.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_REALM = exports.DEFAULT_BASE_URL = exports.MppEnvironment = void 0;
4
+ var environments_js_1 = require("./environments.js");
5
+ Object.defineProperty(exports, "MppEnvironment", { enumerable: true, get: function () { return environments_js_1.MppEnvironment; } });
6
+ Object.defineProperty(exports, "DEFAULT_BASE_URL", { enumerable: true, get: function () { return environments_js_1.DEFAULT_BASE_URL; } });
7
+ Object.defineProperty(exports, "DEFAULT_REALM", { enumerable: true, get: function () { return environments_js_1.DEFAULT_REALM; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;AAAA,qDAAoF;AAA3E,iHAAA,cAAc,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAAE,gHAAA,aAAa,OAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Plural MPP Seller SDK — TypeScript port of `plural-mpp-seller-sdk`.
3
+ *
4
+ * Issues HTTP 402 challenges, verifies UPI SBMD credentials, captures
5
+ * payments, and returns receipts — works standalone or with any framework.
6
+ */
7
+ export { PluralMPP, PluralMPPInstance, } from "./server/plural-mpp.js";
8
+ export { ChallengeGenerator } from "./server/challenge-generator.js";
9
+ export { CredentialVerifier } from "./server/credential-verifier.js";
10
+ export { CaptureClient } from "./server/capture-client.js";
11
+ export { AuthManager } from "./server/auth-manager.js";
12
+ export { GrantTokenVerifier, GRANTEX_TOKEN_HEADER, } from "./server/grant-token-verifier.js";
13
+ export { buildReceiptData, buildReceiptHeader, buildFailureReceiptData, } from "./server/receipt-builder.js";
14
+ export { decidePayment } from "./middleware/generic.js";
15
+ export type { PaymentDecision, DecidePaymentOptions } from "./middleware/generic.js";
16
+ export type { Amount, ChargeOptions, MppLogger, PluralSellerConfig, } from "./types/config.js";
17
+ export type { Challenge, ChallengeRequest, ChallengeResult, ProblemDetails, } from "./types/challenge.js";
18
+ export type { Credential, CredentialChallenge, CredentialPayload, VerificationResult, } from "./types/credential.js";
19
+ export type { CaptureOptions, CaptureResult, ReceiptData, Settlement, } from "./types/capture.js";
20
+ export type { GrantTokenClaims, GrantVerificationResult, SellerGrantexConfig, } from "./types/grantex.js";
21
+ export type { AuthResponse, AuthState } from "./types/auth.js";
22
+ export { MppErrorCode } from "./types/errors.js";
23
+ export type { MppErrorDetails, MppErrorResponse } from "./types/errors.js";
24
+ export { MppError, MppCaptureError, MppVerificationError } from "./utils/errors.js";
25
+ export { MppEnvironment, DEFAULT_BASE_URL, DEFAULT_REALM } from "./config/environments.js";
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,SAAS,EACT,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,YAAY,EACV,MAAM,EACN,aAAa,EACb,SAAS,EACT,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGpF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Plural MPP Seller SDK — TypeScript port of `plural-mpp-seller-sdk`.
4
+ *
5
+ * Issues HTTP 402 challenges, verifies UPI SBMD credentials, captures
6
+ * payments, and returns receipts — works standalone or with any framework.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_REALM = exports.DEFAULT_BASE_URL = exports.MppEnvironment = exports.MppVerificationError = exports.MppCaptureError = exports.MppError = exports.MppErrorCode = exports.decidePayment = exports.buildFailureReceiptData = exports.buildReceiptHeader = exports.buildReceiptData = exports.GRANTEX_TOKEN_HEADER = exports.GrantTokenVerifier = exports.AuthManager = exports.CaptureClient = exports.CredentialVerifier = exports.ChallengeGenerator = exports.PluralMPPInstance = exports.PluralMPP = void 0;
10
+ // Server
11
+ var plural_mpp_js_1 = require("./server/plural-mpp.js");
12
+ Object.defineProperty(exports, "PluralMPP", { enumerable: true, get: function () { return plural_mpp_js_1.PluralMPP; } });
13
+ Object.defineProperty(exports, "PluralMPPInstance", { enumerable: true, get: function () { return plural_mpp_js_1.PluralMPPInstance; } });
14
+ var challenge_generator_js_1 = require("./server/challenge-generator.js");
15
+ Object.defineProperty(exports, "ChallengeGenerator", { enumerable: true, get: function () { return challenge_generator_js_1.ChallengeGenerator; } });
16
+ var credential_verifier_js_1 = require("./server/credential-verifier.js");
17
+ Object.defineProperty(exports, "CredentialVerifier", { enumerable: true, get: function () { return credential_verifier_js_1.CredentialVerifier; } });
18
+ var capture_client_js_1 = require("./server/capture-client.js");
19
+ Object.defineProperty(exports, "CaptureClient", { enumerable: true, get: function () { return capture_client_js_1.CaptureClient; } });
20
+ var auth_manager_js_1 = require("./server/auth-manager.js");
21
+ Object.defineProperty(exports, "AuthManager", { enumerable: true, get: function () { return auth_manager_js_1.AuthManager; } });
22
+ var grant_token_verifier_js_1 = require("./server/grant-token-verifier.js");
23
+ Object.defineProperty(exports, "GrantTokenVerifier", { enumerable: true, get: function () { return grant_token_verifier_js_1.GrantTokenVerifier; } });
24
+ Object.defineProperty(exports, "GRANTEX_TOKEN_HEADER", { enumerable: true, get: function () { return grant_token_verifier_js_1.GRANTEX_TOKEN_HEADER; } });
25
+ var receipt_builder_js_1 = require("./server/receipt-builder.js");
26
+ Object.defineProperty(exports, "buildReceiptData", { enumerable: true, get: function () { return receipt_builder_js_1.buildReceiptData; } });
27
+ Object.defineProperty(exports, "buildReceiptHeader", { enumerable: true, get: function () { return receipt_builder_js_1.buildReceiptHeader; } });
28
+ Object.defineProperty(exports, "buildFailureReceiptData", { enumerable: true, get: function () { return receipt_builder_js_1.buildFailureReceiptData; } });
29
+ // Middleware
30
+ var generic_js_1 = require("./middleware/generic.js");
31
+ Object.defineProperty(exports, "decidePayment", { enumerable: true, get: function () { return generic_js_1.decidePayment; } });
32
+ var errors_js_1 = require("./types/errors.js");
33
+ Object.defineProperty(exports, "MppErrorCode", { enumerable: true, get: function () { return errors_js_1.MppErrorCode; } });
34
+ // Utils / Errors
35
+ var errors_js_2 = require("./utils/errors.js");
36
+ Object.defineProperty(exports, "MppError", { enumerable: true, get: function () { return errors_js_2.MppError; } });
37
+ Object.defineProperty(exports, "MppCaptureError", { enumerable: true, get: function () { return errors_js_2.MppCaptureError; } });
38
+ Object.defineProperty(exports, "MppVerificationError", { enumerable: true, get: function () { return errors_js_2.MppVerificationError; } });
39
+ // Config
40
+ var environments_js_1 = require("./config/environments.js");
41
+ Object.defineProperty(exports, "MppEnvironment", { enumerable: true, get: function () { return environments_js_1.MppEnvironment; } });
42
+ Object.defineProperty(exports, "DEFAULT_BASE_URL", { enumerable: true, get: function () { return environments_js_1.DEFAULT_BASE_URL; } });
43
+ Object.defineProperty(exports, "DEFAULT_REALM", { enumerable: true, get: function () { return environments_js_1.DEFAULT_REALM; } });
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,SAAS;AACT,wDAGgC;AAF9B,0GAAA,SAAS,OAAA;AACT,kHAAA,iBAAiB,OAAA;AAEnB,0EAAqE;AAA5D,4HAAA,kBAAkB,OAAA;AAC3B,0EAAqE;AAA5D,4HAAA,kBAAkB,OAAA;AAC3B,gEAA2D;AAAlD,kHAAA,aAAa,OAAA;AACtB,4DAAuD;AAA9C,8GAAA,WAAW,OAAA;AACpB,4EAG0C;AAFxC,6HAAA,kBAAkB,OAAA;AAClB,+HAAA,oBAAoB,OAAA;AAEtB,kEAIqC;AAHnC,sHAAA,gBAAgB,OAAA;AAChB,wHAAA,kBAAkB,OAAA;AAClB,6HAAA,uBAAuB,OAAA;AAGzB,aAAa;AACb,sDAAwD;AAA/C,2GAAA,aAAa,OAAA;AAkCtB,+CAAiD;AAAxC,yGAAA,YAAY,OAAA;AAGrB,iBAAiB;AACjB,+CAAoF;AAA3E,qGAAA,QAAQ,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAExD,SAAS;AACT,4DAA2F;AAAlF,iHAAA,cAAc,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAAE,gHAAA,aAAa,OAAA"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Framework-agnostic payment decision helper.
3
+ *
4
+ * Given an incoming request's `Authorization` (and optional `X-Grantex-Token`)
5
+ * header, returns a PaymentDecision describing what to do next — serve a
6
+ * challenge, reject the credential, or proceed with the handler (after capture).
7
+ */
8
+ import type { CaptureResult } from "../types/capture.js";
9
+ import type { ChallengeResult } from "../types/challenge.js";
10
+ import type { ChargeOptions, PluralSellerConfig } from "../types/config.js";
11
+ import type { Credential } from "../types/credential.js";
12
+ export interface PaymentDecision {
13
+ action: string;
14
+ status: number;
15
+ headers: Record<string, string>;
16
+ problemDetails?: Record<string, unknown> | null;
17
+ captureResult?: CaptureResult | null;
18
+ credential?: Credential | null;
19
+ receiptHeader?: string | null;
20
+ challengeResult?: ChallengeResult | null;
21
+ }
22
+ export interface DecidePaymentOptions {
23
+ authorizationHeader?: string | null;
24
+ grantexTokenHeader?: string | null;
25
+ config: PluralSellerConfig;
26
+ chargeOptions: ChargeOptions;
27
+ }
28
+ export declare function decidePayment(opts: DecidePaymentOptions): Promise<PaymentDecision>;
29
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/middleware/generic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6JxF"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decidePayment = decidePayment;
4
+ const errors_js_1 = require("../utils/errors.js");
5
+ const capture_client_js_1 = require("../server/capture-client.js");
6
+ const challenge_generator_js_1 = require("../server/challenge-generator.js");
7
+ const credential_verifier_js_1 = require("../server/credential-verifier.js");
8
+ const grant_token_verifier_js_1 = require("../server/grant-token-verifier.js");
9
+ const receipt_builder_js_1 = require("../server/receipt-builder.js");
10
+ async function decidePayment(opts) {
11
+ const { config, chargeOptions } = opts;
12
+ const challengeGenerator = new challenge_generator_js_1.ChallengeGenerator(config);
13
+ const credentialVerifier = new credential_verifier_js_1.CredentialVerifier(config);
14
+ if (!opts.authorizationHeader || !opts.authorizationHeader.startsWith("Payment ")) {
15
+ const result = challengeGenerator.generate(chargeOptions);
16
+ return {
17
+ action: "challenge",
18
+ status: 402,
19
+ headers: {
20
+ "WWW-Authenticate": `Payment ${result.encoded}`,
21
+ "Content-Type": "application/problem+json",
22
+ "Cache-Control": "no-store",
23
+ },
24
+ problemDetails: {
25
+ type: result.problemDetails.type,
26
+ title: result.problemDetails.title,
27
+ status: result.problemDetails.status,
28
+ detail: result.problemDetails.detail,
29
+ challengeId: result.problemDetails.challengeId,
30
+ },
31
+ challengeResult: result,
32
+ };
33
+ }
34
+ const verification = credentialVerifier.verify(opts.authorizationHeader);
35
+ if (!verification.valid) {
36
+ const result = challengeGenerator.generate(chargeOptions);
37
+ return {
38
+ action: "invalid",
39
+ status: 402,
40
+ headers: {
41
+ "WWW-Authenticate": `Payment ${result.encoded}`,
42
+ "Content-Type": "application/problem+json",
43
+ "Cache-Control": "no-store",
44
+ },
45
+ problemDetails: {
46
+ type: result.problemDetails.type.replace("payment-required", "payment-invalid"),
47
+ title: "Invalid Payment Credential",
48
+ status: 402,
49
+ detail: verification.error ?? "The payment credential could not be verified.",
50
+ challengeId: result.challenge.id,
51
+ },
52
+ challengeResult: result,
53
+ };
54
+ }
55
+ // Optional Grantex token verification
56
+ if (config.grantex) {
57
+ const enforce = !!config.grantex.enforceGrant;
58
+ if (!opts.grantexTokenHeader && enforce) {
59
+ return {
60
+ action: "grant_required",
61
+ status: 403,
62
+ headers: { "Content-Type": "application/problem+json" },
63
+ problemDetails: {
64
+ type: "urn:ietf:rfc:9725:error:grant-required",
65
+ title: "Grant Token Required",
66
+ status: 403,
67
+ detail: `A valid Grantex grant token is required in the ${grant_token_verifier_js_1.GRANTEX_TOKEN_HEADER} header.`,
68
+ },
69
+ };
70
+ }
71
+ if (opts.grantexTokenHeader) {
72
+ const grantResult = await new grant_token_verifier_js_1.GrantTokenVerifier(config.grantex).verify(opts.grantexTokenHeader);
73
+ if (!grantResult.valid) {
74
+ if (enforce) {
75
+ return {
76
+ action: "grant_invalid",
77
+ status: 403,
78
+ headers: { "Content-Type": "application/problem+json" },
79
+ problemDetails: {
80
+ type: "urn:ietf:rfc:9725:error:grant-invalid",
81
+ title: "Invalid Grant Token",
82
+ status: 403,
83
+ detail: grantResult.error ?? "The grant token could not be verified.",
84
+ },
85
+ };
86
+ }
87
+ if (config.logger) {
88
+ try {
89
+ config.logger.info("Grantex token verification failed (non-enforcing)", {
90
+ error: grantResult.error,
91
+ });
92
+ }
93
+ catch {
94
+ // non-fatal
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ const credential = verification.credential;
101
+ const captureClient = new capture_client_js_1.CaptureClient(config);
102
+ try {
103
+ const captureResult = await captureClient.capture({
104
+ token: credential.payload.token,
105
+ amount: chargeOptions.amount,
106
+ description: chargeOptions.description,
107
+ merchantOrderReference: chargeOptions.merchantOrderReference,
108
+ metadata: chargeOptions.metadata,
109
+ });
110
+ const receiptHeader = (0, receipt_builder_js_1.buildReceiptHeader)(captureResult, credential.challenge.id);
111
+ return {
112
+ action: "proceed",
113
+ status: 200,
114
+ headers: { "Payment-Receipt": receiptHeader },
115
+ captureResult,
116
+ credential,
117
+ receiptHeader,
118
+ };
119
+ }
120
+ catch (err) {
121
+ if (err instanceof errors_js_1.MppCaptureError && err.captureError) {
122
+ if (err.captureError.httpStatus >= 500) {
123
+ return {
124
+ action: "error",
125
+ status: 502,
126
+ headers: { "Content-Type": "application/problem+json" },
127
+ problemDetails: {
128
+ type: "urn:plural:error:payment-capture-failed",
129
+ title: "Payment Capture Failed",
130
+ status: 502,
131
+ detail: String(err),
132
+ upstream: {
133
+ code: err.captureError.code,
134
+ http_status: err.captureError.httpStatus,
135
+ details: err.captureError.details,
136
+ },
137
+ },
138
+ };
139
+ }
140
+ }
141
+ const result = challengeGenerator.generate(chargeOptions);
142
+ return {
143
+ action: "failed",
144
+ status: 402,
145
+ headers: {
146
+ "WWW-Authenticate": `Payment ${result.encoded}`,
147
+ "Content-Type": "application/problem+json",
148
+ "Cache-Control": "no-store",
149
+ },
150
+ problemDetails: {
151
+ type: result.problemDetails.type.replace("payment-required", "payment-failed"),
152
+ title: "Payment Failed",
153
+ status: 402,
154
+ detail: "Previous payment token was invalid or expired. New challenge issued.",
155
+ challengeId: result.challenge.id,
156
+ },
157
+ challengeResult: result,
158
+ };
159
+ }
160
+ }
161
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/middleware/generic.ts"],"names":[],"mappings":";;AAoCA,sCA6JC;AAtLD,kDAAqD;AACrD,mEAA4D;AAC5D,6EAAsE;AACtE,6EAAsE;AACtE,+EAA6F;AAC7F,qEAAkE;AAoB3D,KAAK,UAAU,aAAa,CAAC,IAA0B;IAC5D,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACvC,MAAM,kBAAkB,GAAG,IAAI,2CAAkB,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,IAAI,2CAAkB,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1D,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,kBAAkB,EAAE,WAAW,MAAM,CAAC,OAAO,EAAE;gBAC/C,cAAc,EAAE,0BAA0B;gBAC1C,eAAe,EAAE,UAAU;aAC5B;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI;gBAChC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK;gBAClC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;gBACpC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;gBACpC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW;aAC/C;YACD,eAAe,EAAE,MAAM;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1D,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,kBAAkB,EAAE,WAAW,MAAM,CAAC,OAAO,EAAE;gBAC/C,cAAc,EAAE,0BAA0B;gBAC1C,eAAe,EAAE,UAAU;aAC5B;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;gBAC/E,KAAK,EAAE,4BAA4B;gBACnC,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,YAAY,CAAC,KAAK,IAAI,+CAA+C;gBAC7E,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE;aACjC;YACD,eAAe,EAAE,MAAM;SACxB,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,OAAO,EAAE,CAAC;YACxC,OAAO;gBACL,MAAM,EAAE,gBAAgB;gBACxB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;gBACvD,cAAc,EAAE;oBACd,IAAI,EAAE,wCAAwC;oBAC9C,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,GAAG;oBACX,MAAM,EAAE,kDAAkD,8CAAoB,UAAU;iBACzF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,4CAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CACrE,IAAI,CAAC,kBAAkB,CACxB,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;wBACL,MAAM,EAAE,eAAe;wBACvB,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;wBACvD,cAAc,EAAE;4BACd,IAAI,EAAE,uCAAuC;4BAC7C,KAAK,EAAE,qBAAqB;4BAC5B,MAAM,EAAE,GAAG;4BACX,MAAM,EAAE,WAAW,CAAC,KAAK,IAAI,wCAAwC;yBACtE;qBACF,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,IAAI,CAAC;wBACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE;4BACtE,KAAK,EAAE,WAAW,CAAC,KAAK;yBACzB,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,UAAW,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,iCAAa,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC;YAChD,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK;YAC/B,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,sBAAsB,EAAE,aAAa,CAAC,sBAAsB;YAC5D,QAAQ,EAAE,aAAa,CAAC,QAAyC;SAClE,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAA,uCAAkB,EAAC,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE;YAC7C,aAAa;YACb,UAAU;YACV,aAAa;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,2BAAe,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACvD,IAAI,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;gBACvC,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;oBACvD,cAAc,EAAE;wBACd,IAAI,EAAE,yCAAyC;wBAC/C,KAAK,EAAE,wBAAwB;wBAC/B,MAAM,EAAE,GAAG;wBACX,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;wBACnB,QAAQ,EAAE;4BACR,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI;4BAC3B,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,UAAU;4BACxC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO;yBAClC;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1D,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,kBAAkB,EAAE,WAAW,MAAM,CAAC,OAAO,EAAE;gBAC/C,cAAc,EAAE,0BAA0B;gBAC1C,eAAe,EAAE,UAAU;aAC5B;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;gBAC9E,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,sEAAsE;gBAC9E,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE;aACjC;YACD,eAAe,EAAE,MAAM;SACxB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { decidePayment } from "./generic.js";
2
+ export type { PaymentDecision, DecidePaymentOptions } from "./generic.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decidePayment = void 0;
4
+ var generic_js_1 = require("./generic.js");
5
+ Object.defineProperty(exports, "decidePayment", { enumerable: true, get: function () { return generic_js_1.decidePayment; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAApC,2GAAA,aAAa,OAAA"}
@@ -0,0 +1,19 @@
1
+ import type { MppLogger } from "../types/config.js";
2
+ export declare class AuthManager {
3
+ private readonly clientId;
4
+ private readonly clientSecret;
5
+ private readonly baseUrl;
6
+ private readonly timeoutMs?;
7
+ private readonly logger?;
8
+ private readonly maxRetries?;
9
+ private readonly initialRetryDelayMs?;
10
+ private readonly staticAccessToken;
11
+ private state;
12
+ constructor(clientId: string, clientSecret: string, baseUrl: string, timeoutMs?: number | null, logger?: MppLogger | null, maxRetries?: number | null, initialRetryDelayMs?: number | null, accessToken?: string | null);
13
+ getAccessToken(): Promise<string>;
14
+ invalidate(): void;
15
+ private isExpiringSoon;
16
+ private static normalizeAccessToken;
17
+ private exchangeToken;
18
+ }
19
+ //# sourceMappingURL=auth-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../../src/server/auth-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,KAAK,CAA0B;gBAGrC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,EACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,EAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,EACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAYvB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMvC,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,MAAM,CAAC,oBAAoB;YAQrB,aAAa;CA8D5B"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthManager = void 0;
4
+ const errors_js_1 = require("../utils/errors.js");
5
+ const fetch_helpers_js_1 = require("../utils/fetch-helpers.js");
6
+ const REFRESH_BUFFER_MS = 60_000;
7
+ class AuthManager {
8
+ clientId;
9
+ clientSecret;
10
+ baseUrl;
11
+ timeoutMs;
12
+ logger;
13
+ maxRetries;
14
+ initialRetryDelayMs;
15
+ staticAccessToken;
16
+ state = null;
17
+ constructor(clientId, clientSecret, baseUrl, timeoutMs, logger, maxRetries, initialRetryDelayMs, accessToken) {
18
+ this.clientId = clientId;
19
+ this.clientSecret = clientSecret;
20
+ this.baseUrl = baseUrl.replace(/\/+$/, "");
21
+ this.timeoutMs = timeoutMs;
22
+ this.logger = logger;
23
+ this.maxRetries = maxRetries;
24
+ this.initialRetryDelayMs = initialRetryDelayMs;
25
+ this.staticAccessToken = AuthManager.normalizeAccessToken(accessToken);
26
+ }
27
+ async getAccessToken() {
28
+ if (this.staticAccessToken)
29
+ return this.staticAccessToken;
30
+ if (this.state && !this.isExpiringSoon())
31
+ return this.state.access_token;
32
+ return this.exchangeToken();
33
+ }
34
+ invalidate() {
35
+ this.state = null;
36
+ }
37
+ isExpiringSoon() {
38
+ if (!this.state)
39
+ return true;
40
+ return Date.now() >= this.state.expires_at - REFRESH_BUFFER_MS;
41
+ }
42
+ static normalizeAccessToken(accessToken) {
43
+ let token = (accessToken ?? "").trim();
44
+ if (token.toLowerCase().startsWith("bearer ")) {
45
+ token = token.slice(7).trim();
46
+ }
47
+ return token;
48
+ }
49
+ async exchangeToken() {
50
+ let response = null;
51
+ for (const path of ["/api/auth/v1/token", "/mpp/v1/auth/token"]) {
52
+ const url = `${this.baseUrl}${path}`;
53
+ response = await (0, fetch_helpers_js_1.requestWithRetry)({
54
+ method: "POST",
55
+ url,
56
+ headers: { "Content-Type": "application/json" },
57
+ body: JSON.stringify({
58
+ grant_type: "client_credentials",
59
+ client_id: this.clientId,
60
+ client_secret: this.clientSecret,
61
+ }),
62
+ timeoutMs: this.timeoutMs,
63
+ logger: this.logger,
64
+ maxRetries: this.maxRetries,
65
+ initialRetryDelayMs: this.initialRetryDelayMs,
66
+ });
67
+ if (response.status === 404)
68
+ continue;
69
+ break;
70
+ }
71
+ if (!response || response.status >= 400) {
72
+ let body;
73
+ try {
74
+ body = response ? (await response.json()) : {};
75
+ }
76
+ catch {
77
+ body = {};
78
+ }
79
+ if (!body.error) {
80
+ body = {
81
+ error: {
82
+ code: "MPP_AUTHENTICATION_FAILED",
83
+ message: "Merchant token exchange failed",
84
+ },
85
+ };
86
+ }
87
+ throw errors_js_1.MppError.fromResponse(response?.status ?? 500, body);
88
+ }
89
+ const payload = (await response.json());
90
+ const data = payload.data ?? payload;
91
+ let expiresAtMs = null;
92
+ if (data.expires_at) {
93
+ try {
94
+ const dt = new Date(String(data.expires_at));
95
+ expiresAtMs = dt.getTime();
96
+ }
97
+ catch {
98
+ expiresAtMs = null;
99
+ }
100
+ }
101
+ this.state = {
102
+ access_token: data.access_token,
103
+ expires_at: expiresAtMs ?? Date.now() + data.expires_in * 1000,
104
+ scope: data.scope ?? "",
105
+ };
106
+ return this.state.access_token;
107
+ }
108
+ }
109
+ exports.AuthManager = AuthManager;
110
+ //# sourceMappingURL=auth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../../src/server/auth-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CaptureOptions, CaptureResult } from "../types/capture.js";
2
+ import type { PluralSellerConfig } from "../types/config.js";
3
+ export declare class CaptureClient {
4
+ private readonly baseUrl;
5
+ private readonly timeoutMs?;
6
+ private readonly maxRetries?;
7
+ private readonly initialRetryDelayMs?;
8
+ private readonly logger?;
9
+ private readonly auth;
10
+ constructor(config: PluralSellerConfig);
11
+ capture(options: CaptureOptions): Promise<CaptureResult>;
12
+ }
13
+ //# sourceMappingURL=capture-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-client.d.ts","sourceRoot":"","sources":["../../src/server/capture-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAqB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKhF,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;gBAEvB,MAAM,EAAE,kBAAkB;IAkBhC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoD/D"}