medusa-plugin-braintree 0.1.1 → 0.2.1

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.
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /// <reference types="jest" />
4
+ const provider_1 = require("../provider");
5
+ // ── Mocks ────────────────────────────────────────────────────────────────────
6
+ const mockCaching = {
7
+ get: jest.fn(),
8
+ set: jest.fn(),
9
+ clear: jest.fn()
10
+ };
11
+ const mockGateway = {
12
+ clientToken: {
13
+ generate: jest.fn().mockResolvedValue({ clientToken: 'generated-token-123' })
14
+ }
15
+ };
16
+ const mockLogger = {
17
+ info: jest.fn(),
18
+ warn: jest.fn(),
19
+ error: jest.fn(),
20
+ debug: jest.fn()
21
+ };
22
+ const defaultOptions = {
23
+ environment: 'sandbox',
24
+ merchantId: 'test-merchant',
25
+ publicKey: 'test-public',
26
+ privateKey: 'test-private',
27
+ webhookSecret: 'test-secret',
28
+ enable3DSecure: false,
29
+ savePaymentMethod: false,
30
+ autoCapture: false
31
+ };
32
+ function createProvider() {
33
+ const container = {
34
+ logger: mockLogger,
35
+ caching: mockCaching
36
+ };
37
+ const provider = new provider_1.BraintreeProvider(container, defaultOptions);
38
+ provider.gateway = mockGateway;
39
+ return provider;
40
+ }
41
+ // ── Tests ────────────────────────────────────────────────────────────────────
42
+ describe('BraintreeProvider caching', () => {
43
+ let provider;
44
+ beforeEach(() => {
45
+ jest.clearAllMocks();
46
+ provider = createProvider();
47
+ });
48
+ describe('saveClientTokenToCache', () => {
49
+ it('stores token as { token } object with correct key and TTL', async () => {
50
+ const now = Math.floor(Date.now() / 1000);
51
+ const expiry = now + 3600; // 1 hour from now
52
+ await provider.saveClientTokenToCache('tok_abc', 'cus_123', expiry);
53
+ expect(mockCaching.set).toHaveBeenCalledTimes(1);
54
+ const call = mockCaching.set.mock.calls[0][0];
55
+ expect(call.key).toBe('braintree:clientToken:cus_123');
56
+ expect(call.data).toEqual({ token: 'tok_abc' });
57
+ expect(call.ttl).toBeGreaterThan(0);
58
+ expect(call.ttl).toBeLessThanOrEqual(3600);
59
+ });
60
+ it('does not cache when TTL would be <= 0', async () => {
61
+ const expired = Math.floor(Date.now() / 1000) - 10;
62
+ await provider.saveClientTokenToCache('tok_abc', 'cus_123', expired);
63
+ expect(mockCaching.set).not.toHaveBeenCalled();
64
+ });
65
+ it('does not cache when clientToken is empty', async () => {
66
+ const expiry = Math.floor(Date.now() / 1000) + 3600;
67
+ await provider.saveClientTokenToCache('', 'cus_123', expiry);
68
+ expect(mockCaching.set).not.toHaveBeenCalled();
69
+ });
70
+ it('throws when customerId is missing', async () => {
71
+ const expiry = Math.floor(Date.now() / 1000) + 3600;
72
+ await expect(provider.saveClientTokenToCache('tok_abc', '', expiry)).rejects.toThrow('Customer ID is required');
73
+ });
74
+ });
75
+ describe('getClientTokenFromCache', () => {
76
+ it('returns the cached token string when found', async () => {
77
+ mockCaching.get.mockResolvedValueOnce({ token: 'cached-tok' });
78
+ const result = await provider.getClientTokenFromCache('cus_123');
79
+ expect(mockCaching.get).toHaveBeenCalledWith({ key: 'braintree:clientToken:cus_123' });
80
+ expect(result).toBe('cached-tok');
81
+ });
82
+ it('returns null when cache misses', async () => {
83
+ mockCaching.get.mockResolvedValueOnce(null);
84
+ const result = await provider.getClientTokenFromCache('cus_123');
85
+ expect(result).toBeNull();
86
+ });
87
+ });
88
+ describe('getValidClientToken', () => {
89
+ it('returns cached token without generating a new one', async () => {
90
+ mockCaching.get.mockResolvedValueOnce({ token: 'cached-tok' });
91
+ const result = await provider.getValidClientToken('cus_123', undefined);
92
+ expect(result).toBe('cached-tok');
93
+ expect(mockGateway.clientToken.generate).not.toHaveBeenCalled();
94
+ });
95
+ it('generates and caches a new token on cache miss', async () => {
96
+ mockCaching.get.mockResolvedValueOnce(null);
97
+ const result = await provider.getValidClientToken('cus_123', undefined);
98
+ expect(result).toBe('generated-token-123');
99
+ expect(mockGateway.clientToken.generate).toHaveBeenCalledTimes(1);
100
+ expect(mockCaching.set).toHaveBeenCalledTimes(1);
101
+ const setCall = mockCaching.set.mock.calls[0][0];
102
+ expect(setCall.key).toBe('braintree:clientToken:cus_123');
103
+ expect(setCall.data).toEqual({ token: 'generated-token-123' });
104
+ expect(setCall.ttl).toBeGreaterThan(0);
105
+ });
106
+ it('generates token without caching when no customerId', async () => {
107
+ const result = await provider.getValidClientToken(undefined, undefined);
108
+ expect(result).toBe('generated-token-123');
109
+ expect(mockCaching.get).not.toHaveBeenCalled();
110
+ expect(mockCaching.set).not.toHaveBeenCalled();
111
+ });
112
+ });
113
+ });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheW1lbnQtYnJhaW50cmVlL19fdGVzdHNfXy9jYWNoaW5nLnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhCQUE4QjtBQUM5QiwwQ0FBK0M7QUFHL0MsZ0ZBQWdGO0FBRWhGLE1BQU0sV0FBVyxHQUFHO0lBQ25CLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNoQixDQUFBO0FBRUQsTUFBTSxXQUFXLEdBQUc7SUFDbkIsV0FBVyxFQUFFO1FBQ1osUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO0tBQzdFO0NBQ0QsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtJQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtDQUNoQixDQUFBO0FBRUQsTUFBTSxjQUFjLEdBQXFCO0lBQ3hDLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFVBQVUsRUFBRSxlQUFlO0lBQzNCLFNBQVMsRUFBRSxhQUFhO0lBQ3hCLFVBQVUsRUFBRSxjQUFjO0lBQzFCLGFBQWEsRUFBRSxhQUFhO0lBQzVCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsV0FBVyxFQUFFLEtBQUs7Q0FDbEIsQ0FBQTtBQUVELFNBQVMsY0FBYztJQUN0QixNQUFNLFNBQVMsR0FB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
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@medusajs/types").ModuleProviderExports;
2
+ export default _default;
3
+ export * from './provider';
@@ -1,8 +1,23 @@
1
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
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  const utils_1 = require("@medusajs/framework/utils");
4
18
  const provider_1 = require("./provider");
5
19
  exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.PAYMENT, {
6
20
  services: [provider_1.BraintreeProvider]
7
21
  });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheW1lbnQtYnJhaW50cmVlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQW1FO0FBQ25FLHlDQUE4QztBQUU5QyxrQkFBZSxJQUFBLHNCQUFjLEVBQUMsZUFBTyxDQUFDLE9BQU8sRUFBRTtJQUM5QyxRQUFRLEVBQUUsQ0FBQyw0QkFBaUIsQ0FBQztDQUM3QixDQUFDLENBQUEifQ==
22
+ __exportStar(require("./provider"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheW1lbnQtYnJhaW50cmVlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBbUU7QUFDbkUseUNBQThDO0FBRTlDLGtCQUFlLElBQUEsc0JBQWMsRUFBQyxlQUFPLENBQUMsT0FBTyxFQUFFO0lBQzlDLFFBQVEsRUFBRSxDQUFDLDRCQUFpQixDQUFDO0NBQzdCLENBQUMsQ0FBQTtBQUVGLDZDQUEwQiJ9
@@ -0,0 +1,55 @@
1
+ import { AbstractPaymentProvider, MedusaError } from '@medusajs/framework/utils';
2
+ import type { AuthorizePaymentInput, AuthorizePaymentOutput, CancelPaymentInput, CancelPaymentOutput, CapturePaymentInput, CapturePaymentOutput, CreateAccountHolderInput, CreateAccountHolderOutput, DeleteAccountHolderInput, DeleteAccountHolderOutput, DeletePaymentInput, DeletePaymentOutput, GetPaymentStatusInput, GetPaymentStatusOutput, ICachingModuleService, InitiatePaymentInput, InitiatePaymentOutput, Logger, PaymentAccountHolderDTO, PaymentProviderContext, ProviderWebhookPayload, RefundPaymentInput, RefundPaymentOutput, RetrievePaymentInput, RetrievePaymentOutput, SavePaymentMethodInput, SavePaymentMethodOutput, UpdateAccountHolderInput, UpdateAccountHolderOutput, UpdatePaymentInput, UpdatePaymentOutput, WebhookActionResult } from '@medusajs/types';
3
+ import type { Transaction } from 'braintree';
4
+ import Braintree from 'braintree';
5
+ import type { BraintreeOptions } from './types';
6
+ export type BraintreeTransactionContext = PaymentProviderContext & Pick<Braintree.TransactionRequest, 'billing' | 'shipping' | 'customFields' | 'orderId' | 'lineItems' | 'shippingAmount' | 'taxAmount' | 'shippingTaxAmount' | 'discountAmount' | 'customer' | 'deviceData'>;
7
+ export interface BraintreePaymentSessionData {
8
+ client_token: string;
9
+ transaction: Transaction;
10
+ amount: number;
11
+ currency_code: string;
12
+ payment_method_nonce?: string;
13
+ account_holder?: PaymentAccountHolderDTO;
14
+ context?: BraintreeTransactionContext;
15
+ }
16
+ export interface BraintreeInitiatePaymentData {
17
+ payment_method_nonce?: string;
18
+ }
19
+ export declare const buildBraintreeError: (error: unknown, operation: string, logger: Logger, context?: Record<string, unknown>) => MedusaError;
20
+ export declare class BraintreeProvider extends AbstractPaymentProvider<BraintreeOptions> {
21
+ static identifier: string;
22
+ protected readonly options_: BraintreeOptions;
23
+ protected gateway: Braintree.BraintreeGateway;
24
+ logger: Logger;
25
+ caching: ICachingModuleService;
26
+ constructor(container: {
27
+ logger: Logger;
28
+ caching: ICachingModuleService;
29
+ }, options: BraintreeOptions);
30
+ saveClientTokenToCache(clientToken: string, customerId: string, expiresOnEpochSeconds: number): Promise<void>;
31
+ getClientTokenFromCache(customerId: string): Promise<string | null>;
32
+ getValidClientToken(medusaCustomerId: string | undefined, accountHolder: PaymentAccountHolderDTO | undefined): Promise<string | null>;
33
+ private parsePaymentSessionData;
34
+ init(): void;
35
+ static validateOptions(options: BraintreeOptions): void;
36
+ capturePayment(input: CapturePaymentInput): Promise<CapturePaymentOutput>;
37
+ authorizePayment(input: AuthorizePaymentInput): Promise<AuthorizePaymentOutput>;
38
+ cancelPayment(input: CancelPaymentInput): Promise<CancelPaymentOutput>;
39
+ private retrieveTransaction;
40
+ private mapTransactionStatusToPaymentStatus;
41
+ private validateInitiatePaymentData;
42
+ initiatePayment(input: InitiatePaymentInput): Promise<InitiatePaymentOutput>;
43
+ private createTransaction;
44
+ deletePayment(input: DeletePaymentInput): Promise<DeletePaymentOutput>;
45
+ getPaymentStatus(input: GetPaymentStatusInput): Promise<GetPaymentStatusOutput>;
46
+ savePaymentMethod(input: SavePaymentMethodInput): Promise<SavePaymentMethodOutput>;
47
+ refundPayment(input: RefundPaymentInput): Promise<RefundPaymentOutput>;
48
+ retrievePayment(input: RetrievePaymentInput): Promise<RetrievePaymentOutput>;
49
+ updatePayment(input: UpdatePaymentInput): Promise<UpdatePaymentOutput>;
50
+ createAccountHolder(input: CreateAccountHolderInput): Promise<CreateAccountHolderOutput>;
51
+ updateAccountHolder(input: UpdateAccountHolderInput): Promise<UpdateAccountHolderOutput>;
52
+ deleteAccountHolder(input: DeleteAccountHolderInput): Promise<DeleteAccountHolderOutput>;
53
+ getWebhookActionAndData(webhookData: ProviderWebhookPayload['payload']): Promise<WebhookActionResult>;
54
+ private createBraintreeCustomer;
55
+ }
@@ -81,7 +81,7 @@ class BraintreeProvider extends utils_1.AbstractPaymentProvider {
81
81
  .object({
82
82
  firstName: zod_1.z.string(),
83
83
  lastName: zod_1.z.string(),
84
- email: zod_1.z.string().email(),
84
+ email: zod_1.z.email(),
85
85
  phone: zod_1.z.string().optional()
86
86
  })
87
87
  .optional(),
@@ -651,4 +651,4 @@ class BraintreeProvider extends utils_1.AbstractPaymentProvider {
651
651
  }
652
652
  exports.BraintreeProvider = BraintreeProvider;
653
653
  BraintreeProvider.identifier = 'braintree';
654
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheW1lbnQtYnJhaW50cmVlL3Byb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQVNrQztBQXFDbEMsMERBQWlDO0FBQ2pDLDZCQUF1QjtBQUN2QixtQ0FBa0Q7QUFpQ2xELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyx5QkFBeUIsVUFBVSxFQUFFLENBQUE7QUFFeEYsZ0RBQWdEO0FBQ2hELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUFFLFNBQWlCLEVBQVUsRUFBRTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsR0FBRyxTQUFTLDZCQUE2QixDQUN6QyxDQUFBO0lBQ0YsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsMkRBQTJEO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsQ0FDbEMsS0FBYyxFQUNkLFNBQWlCLEVBQ2pCLE1BQWMsRUFDZCxPQUFpQyxFQUNuQixFQUFFO0lBQ2hCLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUzRSx5Q0FBeUM7SUFDekMsTUFBTSxDQUFDLEtBQUssQ0FDWCxhQUFhLFNBQVMsWUFBWSxZQUFZLEVBQUUsRUFDaEQsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzFDLENBQUE7SUFFRCxPQUFPLElBQUksbUJBQVcs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
654
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheW1lbnQtYnJhaW50cmVlL3Byb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQVNrQztBQXFDbEMsMERBQWlDO0FBQ2pDLDZCQUF1QjtBQUN2QixtQ0FBa0Q7QUFpQ2xELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyx5QkFBeUIsVUFBVSxFQUFFLENBQUE7QUFFeEYsZ0RBQWdEO0FBQ2hELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUFFLFNBQWlCLEVBQVUsRUFBRTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsR0FBRyxTQUFTLDZCQUE2QixDQUN6QyxDQUFBO0lBQ0YsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsMkRBQTJEO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsQ0FDbEMsS0FBYyxFQUNkLFNBQWlCLEVBQ2pCLE1BQWMsRUFDZCxPQUFpQyxFQUNuQixFQUFFO0lBQ2hCLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUzRSx5Q0FBeUM7SUFDekMsTUFBTSxDQUFDLEtBQUssQ0FDWCxhQUFhLFNBQVMsWUFBWSxZQUFZLEVBQUUsRUFDaEQsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzFDLENBQUE7SUFFRCxPQUFPLElBQUksbUJBQVcs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
@@ -0,0 +1,70 @@
1
+ export interface BraintreeOptions {
2
+ environment: 'production' | 'sandbox' | 'development' | 'qa';
3
+ merchantId: string;
4
+ publicKey: string;
5
+ privateKey: string;
6
+ webhookSecret: string;
7
+ enable3DSecure: boolean;
8
+ savePaymentMethod: boolean;
9
+ autoCapture: boolean;
10
+ defaultCurrencyCode?: string;
11
+ allowRefundOnRefunded?: boolean;
12
+ }
13
+ export type CustomFields = Record<string, string>;
14
+ export interface DecodedClientToken {
15
+ version: number;
16
+ authorizationFingerprint: string;
17
+ configUrl: string;
18
+ graphQL: GraphQl;
19
+ clientApiUrl: string;
20
+ environment: string;
21
+ merchantId: string;
22
+ assetsUrl: string;
23
+ authUrl: string;
24
+ venmo: string;
25
+ challenges: string[];
26
+ threeDSecureEnabled: boolean;
27
+ analytics: Analytics;
28
+ paypalEnabled: boolean;
29
+ paypal: Paypal;
30
+ }
31
+ export interface GraphQl {
32
+ url: string;
33
+ date: string;
34
+ features: string[];
35
+ }
36
+ export interface Analytics {
37
+ url: string;
38
+ }
39
+ export interface Paypal {
40
+ billingAgreementsEnabled: boolean;
41
+ environmentNoNetwork: boolean;
42
+ unvettedMerchant: boolean;
43
+ allowHttp: boolean;
44
+ displayName: string;
45
+ clientId: string;
46
+ baseUrl: string;
47
+ assetsUrl: string;
48
+ directBaseUrl: string;
49
+ environment: string;
50
+ braintreeClientId: string;
51
+ merchantAccountId: string;
52
+ currencyIsoCode: string;
53
+ }
54
+ export interface DecodedClientTokenAuthorization {
55
+ exp: number;
56
+ jti: string;
57
+ sub: string;
58
+ iss: string;
59
+ merchant: Merchant;
60
+ rights: string[];
61
+ scope: string[];
62
+ options: Options;
63
+ }
64
+ export interface Merchant {
65
+ public_id: string;
66
+ verify_card_by_default: boolean;
67
+ verify_wallet_by_default: boolean;
68
+ }
69
+ export interface Options {
70
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Formats a number or string to a two-decimal string representation.
3
+ * Validates the input is parseable to a number and throws MedusaError on NaN.
4
+ *
5
+ * @param amount - The amount to format (number or string)
6
+ * @returns A string representation with exactly 2 decimal places
7
+ * @throws MedusaError if the amount is not a valid number
8
+ */
9
+ export declare function formatToTwoDecimalString(amount: number | string): string;
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Lacey Pevey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-plugin-braintree",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Braintree payment provider plugin for Medusa v2",
5
5
  "author": "Lacey Pevey",
6
6
  "license": "MIT",
@@ -14,11 +14,26 @@
14
14
  ],
15
15
  "exports": {
16
16
  "./package.json": "./package.json",
17
- "./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
18
- "./modules/*": "./.medusa/server/src/modules/*/index.js",
19
- "./providers/*": "./.medusa/server/src/providers/*/index.js",
20
- "./*": "./.medusa/server/src/*.js",
21
- ".": "./.medusa/server/src/providers/payment-braintree/index.js"
17
+ "./.medusa/server/src/modules/*": {
18
+ "types": "./.medusa/server/src/modules/*/index.d.ts",
19
+ "default": "./.medusa/server/src/modules/*/index.js"
20
+ },
21
+ "./modules/*": {
22
+ "types": "./.medusa/server/src/modules/*/index.d.ts",
23
+ "default": "./.medusa/server/src/modules/*/index.js"
24
+ },
25
+ "./providers/*": {
26
+ "types": "./.medusa/server/src/providers/*/index.d.ts",
27
+ "default": "./.medusa/server/src/providers/*/index.js"
28
+ },
29
+ "./*": {
30
+ "types": "./.medusa/server/src/*.d.ts",
31
+ "default": "./.medusa/server/src/*.js"
32
+ },
33
+ ".": {
34
+ "types": "./.medusa/server/src/providers/payment-braintree/index.d.ts",
35
+ "default": "./.medusa/server/src/providers/payment-braintree/index.js"
36
+ }
22
37
  },
23
38
  "keywords": [
24
39
  "medusa-plugin-payment",
@@ -32,46 +47,42 @@
32
47
  "build": "medusa plugin:build",
33
48
  "dev": "medusa plugin:develop",
34
49
  "prepublishOnly": "medusa plugin:build",
35
- "test:unit": "TEST_TYPE=unit NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --detectOpenHandles --forceExit"
50
+ "test:unit": "TEST_TYPE=unit NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --detectOpenHandles --forceExit",
51
+ "test:integration:http": "TEST_TYPE=integration:http NODE_OPTIONS=--experimental-vm-modules jest --silent=false --runInBand --detectOpenHandles --forceExit"
36
52
  },
37
53
  "dependencies": {
38
54
  "braintree": "3.36.0"
39
55
  },
40
56
  "devDependencies": {
41
- "@medusajs/admin-sdk": "2.13.6",
42
- "@medusajs/cli": "2.13.6",
43
- "@medusajs/framework": "2.13.6",
44
- "@medusajs/icons": "2.13.6",
45
- "@medusajs/medusa": "2.13.6",
46
- "@medusajs/test-utils": "2.13.6",
47
- "@medusajs/ui": "4.0.25",
48
- "@swc/core": "^1.7.28",
49
- "@swc/jest": "^0.2.39",
57
+ "@medusajs/admin-sdk": "2.16.0",
58
+ "@medusajs/cli": "2.16.0",
59
+ "@medusajs/framework": "2.16.0",
60
+ "@medusajs/icons": "2.16.0",
61
+ "@medusajs/ui": "4.1.16",
62
+ "@swc/core": "1.15.33",
63
+ "@swc/jest": "0.2.39",
50
64
  "@types/braintree": "3.4.4",
51
- "@types/jest": "^30.0.0",
52
- "@types/node": "^20.0.0",
53
- "@types/react": "^18.3.2",
54
- "@types/react-dom": "^18.2.25",
55
- "jest": "^29.7.0",
56
- "prop-types": "^15.8.1",
57
- "react": "^18.2.0",
58
- "react-dom": "^18.2.0",
59
- "ts-node": "^10.9.2",
60
- "typescript": "^5.6.2",
61
- "vite": "^5.2.11",
62
- "yalc": "^1.0.0-pre.53"
65
+ "@types/jest": "30.0.0",
66
+ "@types/node": "20.0.0",
67
+ "@types/react": "18.3.2",
68
+ "@types/react-dom": "18.2.25",
69
+ "jest": "29.7.0",
70
+ "prop-types": "15.8.1",
71
+ "react": "18.3.1",
72
+ "react-dom": "18.3.1",
73
+ "ts-node": "10.9.2",
74
+ "typescript": "6.0.3",
75
+ "vite": "8.0.8",
76
+ "yalc": "1.0.0-pre.53"
63
77
  },
64
78
  "peerDependencies": {
65
- "@medusajs/admin-sdk": "2.13.6",
66
- "@medusajs/cli": "2.13.6",
67
- "@medusajs/framework": "2.13.6",
68
- "@medusajs/icons": "2.13.6",
69
- "@medusajs/medusa": "2.13.6",
70
- "@medusajs/test-utils": "2.13.6",
71
- "@medusajs/ui": "4.0.25"
79
+ "@medusajs/framework": "2.16.0",
80
+ "@medusajs/js-sdk": "2.16.0",
81
+ "@medusajs/medusa": "2.16.0"
72
82
  },
73
83
  "engines": {
74
84
  "node": ">=20"
75
85
  },
76
- "packageManager": "yarn@4.13.0+sha512.5c20ba010c99815433e5c8453112165e673f1c7948d8d2b267f4b5e52097538658388ebc9f9580656d9b75c5cc996f990f611f99304a2197d4c56d21eea370e7"
77
- }
86
+ "packageManager": "yarn@4.13.0+sha512.5c20ba010c99815433e5c8453112165e673f1c7948d8d2b267f4b5e52097538658388ebc9f9580656d9b75c5cc996f990f611f99304a2197d4c56d21eea370e7",
87
+ "gitHead": "e09c71de0e01897fa9441b40b67315b5a7b6d5bf"
88
+ }