torque-checkout 1.1.2 โ†’ 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Official Torque checkout SDK for seamless ecommerce integrations. Generate multi-product checkout links, track orders, and manage customer data with our powerful API.
4
4
 
5
- ## ๐Ÿš€ Quick Start
5
+ ## Quick Start
6
6
 
7
7
  ### Prerequisites
8
8
 
@@ -53,7 +53,7 @@ window.location.href = checkoutUrl
53
53
  // https://torque.fi/checkout/{businessId}/cart?items={encoded_cart_data}
54
54
  ```
55
55
 
56
- ## ๐Ÿ”— URL Structure
56
+ ## URL Structure
57
57
 
58
58
  The SDK generates checkout URLs in this format:
59
59
 
@@ -62,7 +62,7 @@ The SDK generates checkout URLs in this format:
62
62
 
63
63
  The `items` parameter contains URL-encoded JSON with your cart data.
64
64
 
65
- ## ๐Ÿ“š API Reference
65
+ ## API Reference
66
66
 
67
67
  ### Constructor
68
68
 
@@ -194,7 +194,7 @@ const cartHash = torque.generateCartHash({
194
194
  })
195
195
  ```
196
196
 
197
- ## ๐Ÿ›’ Data Types
197
+ ## Data Types
198
198
 
199
199
  ### CartItem
200
200
 
@@ -323,7 +323,7 @@ function redirect_to_torque_checkout($order_id, $posted_data, $order) {
323
323
  }
324
324
  ```
325
325
 
326
- ## ๐Ÿงช Testing
326
+ ## Testing
327
327
 
328
328
  ### Test Environment
329
329
 
@@ -352,7 +352,7 @@ const testCart = {
352
352
  const checkoutUrl = await torque.generateCartCheckoutUrl(testCart)
353
353
  ```
354
354
 
355
- ## ๐Ÿšจ Error Handling
355
+ ## Error Handling
356
356
 
357
357
  The SDK throws descriptive errors for various failure scenarios:
358
358
 
@@ -372,7 +372,7 @@ try {
372
372
  }
373
373
  ```
374
374
 
375
- ## ๐Ÿ“Š Analytics & Tracking
375
+ ## Analytics & Tracking
376
376
 
377
377
  Track customer behavior and optimize conversions:
378
378
 
@@ -388,7 +388,7 @@ await torque.trackCheckoutComplete('order_123', {
388
388
  })
389
389
  ```
390
390
 
391
- ## ๐Ÿ’ฐ Payment Destination
391
+ ## Payment Destination
392
392
 
393
393
  **All checkout payments are automatically sent to the wallet address you set in your business profile.**
394
394
 
@@ -397,7 +397,7 @@ await torque.trackCheckoutComplete('order_123', {
397
397
  - **Secure**: No need to handle payment addresses in your code
398
398
  - **Update anytime**: Change your payment wallet in business settings
399
399
 
400
- ## ๐Ÿ”’ Security
400
+ ## Security
401
401
 
402
402
  - API keys are automatically included in all requests
403
403
  - All requests use HTTPS
@@ -405,31 +405,17 @@ await torque.trackCheckoutComplete('order_123', {
405
405
  - Input validation on all methods
406
406
  - Payment wallet address is securely stored in your business profile
407
407
 
408
- ## ๐Ÿ“ˆ Performance
408
+ ## Performance
409
409
 
410
410
  - Built-in request caching with cart hashing
411
411
  - Configurable timeouts
412
412
  - Efficient error handling
413
413
  - Minimal bundle size
414
414
 
415
- ## ๐Ÿ†˜ Support
415
+ ## Support
416
416
 
417
417
  - **Documentation**: [https://docs.torque.fi](https://docs.torque.fi)
418
418
  - **API Reference**: [https://docs.torque.fi/api](https://docs.torque.fi/api)
419
419
  - **Integration Guide**: [https://docs.torque.fi/integrations](https://docs.torque.fi/integrations)
420
420
  - **NPM Package**: [https://www.npmjs.com/package/torque-checkout](https://www.npmjs.com/package/torque-checkout)
421
421
  - **Support**: hello@torque.fi
422
-
423
- ## ๐Ÿ“ Changelog
424
-
425
- ### v1.0.0
426
- - Initial release
427
- - Multi-product cart support
428
- - Customer data pre-population
429
- - Order status tracking
430
- - Webhook integration
431
- - Analytics tracking
432
-
433
- ## ๐Ÿ“„ License
434
-
435
- MIT License - see [LICENSE](LICENSE) file for details.
package/dist/index.d.ts CHANGED
@@ -36,6 +36,96 @@ export interface CartData {
36
36
  customer?: CustomerData;
37
37
  options?: CartOptions;
38
38
  }
39
+ export interface PaymentPlan {
40
+ id: string;
41
+ name: string;
42
+ price: number;
43
+ interval: "weekly" | "monthly" | "quarterly" | "yearly";
44
+ intervalCount: number;
45
+ trialDays?: number;
46
+ maxCycles?: number;
47
+ description?: string;
48
+ }
49
+ export interface SubscriptionProduct {
50
+ id: string;
51
+ name: string;
52
+ description?: string;
53
+ isSubscription: boolean;
54
+ paymentPlans?: PaymentPlan[];
55
+ subscriptionContract?: {
56
+ address: string;
57
+ chainId: number;
58
+ abi?: string;
59
+ };
60
+ basePrice: number;
61
+ currency: string;
62
+ image?: string;
63
+ images?: string[];
64
+ requiresShipping: boolean;
65
+ shippingCost?: number;
66
+ taxRate?: number;
67
+ inventory: number;
68
+ status: 'active' | 'inactive' | 'draft' | 'archived';
69
+ sku?: string;
70
+ category?: string;
71
+ tags?: string[];
72
+ variants?: Array<{
73
+ id: string;
74
+ name: string;
75
+ price: number;
76
+ inventory?: number;
77
+ }>;
78
+ metadata?: any;
79
+ createdAt: number;
80
+ updatedAt: number;
81
+ }
82
+ export interface Subscription {
83
+ id: string;
84
+ businessId: string;
85
+ productId: string;
86
+ customerId?: string;
87
+ customerEmail: string;
88
+ customerName: string;
89
+ paymentPlanId: string;
90
+ status: "active" | "cancelled" | "paused" | "expired" | "past_due";
91
+ currentPeriodStart: number;
92
+ currentPeriodEnd: number;
93
+ nextBillingDate: number;
94
+ trialStart?: number;
95
+ trialEnd?: number;
96
+ totalCycles: number;
97
+ maxCycles?: number;
98
+ lastPaymentDate?: number;
99
+ nextPaymentAmount: number;
100
+ currency: string;
101
+ contractSubscriptionId?: string;
102
+ contractAddress?: string;
103
+ billingHistory?: Array<{
104
+ cycleNumber: number;
105
+ amount: number;
106
+ date: number;
107
+ status: "paid" | "failed" | "pending";
108
+ transactionId?: string;
109
+ }>;
110
+ metadata?: any;
111
+ createdAt: number;
112
+ updatedAt: number;
113
+ }
114
+ export interface CreateSubscriptionData {
115
+ businessId: string;
116
+ productId: string;
117
+ customerEmail: string;
118
+ customerName: string;
119
+ paymentPlanId: string;
120
+ customerId?: string;
121
+ metadata?: any;
122
+ }
123
+ export interface UpdateSubscriptionData {
124
+ status?: "active" | "cancelled" | "paused" | "expired" | "past_due";
125
+ pauseUntil?: number;
126
+ resumeDate?: number;
127
+ metadata?: any;
128
+ }
39
129
  export interface TorqueConfig {
40
130
  businessId?: string;
41
131
  apiKey?: string;
@@ -128,6 +218,10 @@ export declare class TorqueCheckout {
128
218
  * Generate a single product checkout URL
129
219
  */
130
220
  generateProductCheckoutUrl(productId: string, quantity?: number, customer?: CustomerData, options?: CartOptions): Promise<string>;
221
+ /**
222
+ * Generate a subscription checkout URL
223
+ */
224
+ generateSubscriptionCheckoutUrl(productId: string, paymentPlanId: string, customer?: CustomerData, options?: CartOptions): Promise<string>;
131
225
  /**
132
226
  * Validate cart data before checkout
133
227
  */
@@ -136,6 +230,54 @@ export declare class TorqueCheckout {
136
230
  * Get order status
137
231
  */
138
232
  getOrderStatus(orderId: string): Promise<OrderStatus>;
233
+ /**
234
+ * Create a new subscription
235
+ */
236
+ createSubscription(data: CreateSubscriptionData): Promise<Subscription>;
237
+ /**
238
+ * Get subscription by ID
239
+ */
240
+ getSubscription(subscriptionId: string): Promise<Subscription>;
241
+ /**
242
+ * Get subscriptions for a business
243
+ */
244
+ getBusinessSubscriptions(businessId: string, status?: string, limit?: number): Promise<Subscription[]>;
245
+ /**
246
+ * Get subscriptions for a customer
247
+ */
248
+ getCustomerSubscriptions(customerEmail: string): Promise<Subscription[]>;
249
+ /**
250
+ * Update subscription status
251
+ */
252
+ updateSubscription(subscriptionId: string, data: UpdateSubscriptionData): Promise<Subscription>;
253
+ /**
254
+ * Cancel subscription
255
+ */
256
+ cancelSubscription(subscriptionId: string, effectiveDate?: number): Promise<Subscription>;
257
+ /**
258
+ * Pause subscription
259
+ */
260
+ pauseSubscription(subscriptionId: string, resumeDate?: number): Promise<Subscription>;
261
+ /**
262
+ * Resume subscription
263
+ */
264
+ resumeSubscription(subscriptionId: string): Promise<Subscription>;
265
+ /**
266
+ * Process subscription renewal
267
+ */
268
+ processSubscriptionRenewal(subscriptionId: string): Promise<Subscription>;
269
+ /**
270
+ * Get subscriptions due for renewal
271
+ */
272
+ getSubscriptionsDueForRenewal(daysAhead?: number): Promise<Subscription[]>;
273
+ /**
274
+ * Get subscription products for a business
275
+ */
276
+ getSubscriptionProducts(businessId: string): Promise<SubscriptionProduct[]>;
277
+ /**
278
+ * Get product with payment plans
279
+ */
280
+ getProductWithPaymentPlans(productId: string): Promise<SubscriptionProduct>;
139
281
  /**
140
282
  * Send webhook event
141
283
  */
@@ -148,14 +290,22 @@ export declare class TorqueCheckout {
148
290
  * Track checkout completion for analytics
149
291
  */
150
292
  trackCheckoutComplete(orderId: string, checkoutData: any): Promise<void>;
293
+ /**
294
+ * Track subscription creation for analytics
295
+ */
296
+ trackSubscriptionCreated(subscriptionId: string, subscriptionData: any): Promise<void>;
151
297
  /**
152
298
  * Generate cart hash for caching
153
299
  */
154
300
  generateCartHash(cart: CartData): string;
301
+ /**
302
+ * Generate subscription hash for caching
303
+ */
304
+ generateSubscriptionHash(subscriptionData: CreateSubscriptionData): string;
155
305
  /**
156
306
  * Make HTTP request to Torque API
157
307
  */
158
308
  private makeRequest;
159
309
  }
160
310
  export declare const createTorqueCheckout: (config: TorqueConfig) => TorqueCheckout;
161
- export type { CartItem, CustomerData, CartOptions, CartData, TorqueConfig, CheckoutResponse, OrderStatus, CartValidation };
311
+ export type { CartItem, CustomerData, CartOptions, CartData, PaymentPlan, SubscriptionProduct, Subscription, CreateSubscriptionData, UpdateSubscriptionData, TorqueConfig, CheckoutResponse, OrderStatus, CartValidation };
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  class TorqueCheckout {
2
2
  constructor(config) {
3
- this.baseUrl = 'https://app.torque.fi';
3
+ this.baseUrl = '';
4
4
  this.businessId = config.businessId;
5
5
  this.apiKey = config.apiKey;
6
6
  this.timeout = config.timeout || 30000;
@@ -9,7 +9,7 @@ class TorqueCheckout {
9
9
  * Generate a cart checkout URL
10
10
  */
11
11
  async generateCartCheckoutUrl(cart) {
12
- const response = await this.makeRequest('/api/checkout/generate-link', {
12
+ const response = await this.makeRequest('/api/torque-checkout', {
13
13
  method: 'POST',
14
14
  body: {
15
15
  businessId: this.businessId,
@@ -35,6 +35,23 @@ class TorqueCheckout {
35
35
  options
36
36
  });
37
37
  }
38
+ /**
39
+ * Generate a subscription checkout URL
40
+ */
41
+ async generateSubscriptionCheckoutUrl(productId, paymentPlanId, customer, options) {
42
+ return this.generateCartCheckoutUrl({
43
+ items: [{
44
+ productId,
45
+ quantity: 1,
46
+ metadata: {
47
+ isSubscription: true,
48
+ paymentPlanId
49
+ }
50
+ }],
51
+ customer,
52
+ options
53
+ });
54
+ }
38
55
  /**
39
56
  * Validate cart data before checkout
40
57
  */
@@ -69,6 +86,149 @@ class TorqueCheckout {
69
86
  }
70
87
  return response;
71
88
  }
89
+ // New: Subscription Management Methods
90
+ /**
91
+ * Create a new subscription
92
+ */
93
+ async createSubscription(data) {
94
+ const response = await this.makeRequest('/api/subscriptions/create', {
95
+ method: 'POST',
96
+ body: data
97
+ });
98
+ if (response.error) {
99
+ throw new Error(`Failed to create subscription: ${response.error}`);
100
+ }
101
+ return response;
102
+ }
103
+ /**
104
+ * Get subscription by ID
105
+ */
106
+ async getSubscription(subscriptionId) {
107
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}`);
108
+ if (response.error) {
109
+ throw new Error(`Failed to get subscription: ${response.error}`);
110
+ }
111
+ return response;
112
+ }
113
+ /**
114
+ * Get subscriptions for a business
115
+ */
116
+ async getBusinessSubscriptions(businessId, status, limit) {
117
+ const params = new URLSearchParams({ businessId });
118
+ if (status)
119
+ params.append('status', status);
120
+ if (limit)
121
+ params.append('limit', limit.toString());
122
+ const response = await this.makeRequest(`/api/subscriptions/business?${params}`);
123
+ if (response.error) {
124
+ throw new Error(`Failed to get business subscriptions: ${response.error}`);
125
+ }
126
+ return response;
127
+ }
128
+ /**
129
+ * Get subscriptions for a customer
130
+ */
131
+ async getCustomerSubscriptions(customerEmail) {
132
+ const response = await this.makeRequest(`/api/subscriptions/customer/${encodeURIComponent(customerEmail)}`);
133
+ if (response.error) {
134
+ throw new Error(`Failed to get customer subscriptions: ${response.error}`);
135
+ }
136
+ return response;
137
+ }
138
+ /**
139
+ * Update subscription status
140
+ */
141
+ async updateSubscription(subscriptionId, data) {
142
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/update`, {
143
+ method: 'PUT',
144
+ body: data
145
+ });
146
+ if (response.error) {
147
+ throw new Error(`Failed to update subscription: ${response.error}`);
148
+ }
149
+ return response;
150
+ }
151
+ /**
152
+ * Cancel subscription
153
+ */
154
+ async cancelSubscription(subscriptionId, effectiveDate) {
155
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/cancel`, {
156
+ method: 'PUT',
157
+ body: { effectiveDate }
158
+ });
159
+ if (response.error) {
160
+ throw new Error(`Failed to cancel subscription: ${response.error}`);
161
+ }
162
+ return response;
163
+ }
164
+ /**
165
+ * Pause subscription
166
+ */
167
+ async pauseSubscription(subscriptionId, resumeDate) {
168
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/pause`, {
169
+ method: 'PUT',
170
+ body: { resumeDate }
171
+ });
172
+ if (response.error) {
173
+ throw new Error(`Failed to pause subscription: ${response.error}`);
174
+ }
175
+ return response;
176
+ }
177
+ /**
178
+ * Resume subscription
179
+ */
180
+ async resumeSubscription(subscriptionId) {
181
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/resume`, {
182
+ method: 'PUT'
183
+ });
184
+ if (response.error) {
185
+ throw new Error(`Failed to resume subscription: ${response.error}`);
186
+ }
187
+ return response;
188
+ }
189
+ /**
190
+ * Process subscription renewal
191
+ */
192
+ async processSubscriptionRenewal(subscriptionId) {
193
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/renew`, {
194
+ method: 'PUT'
195
+ });
196
+ if (response.error) {
197
+ throw new Error(`Failed to process subscription renewal: ${response.error}`);
198
+ }
199
+ return response;
200
+ }
201
+ /**
202
+ * Get subscriptions due for renewal
203
+ */
204
+ async getSubscriptionsDueForRenewal(daysAhead = 7) {
205
+ const response = await this.makeRequest(`/api/subscriptions/due-for-renewal?daysAhead=${daysAhead}`);
206
+ if (response.error) {
207
+ throw new Error(`Failed to get subscriptions due for renewal: ${response.error}`);
208
+ }
209
+ return response;
210
+ }
211
+ // New: Product Management Methods
212
+ /**
213
+ * Get subscription products for a business
214
+ */
215
+ async getSubscriptionProducts(businessId) {
216
+ const response = await this.makeRequest(`/api/products/subscriptions?businessId=${businessId}`);
217
+ if (response.error) {
218
+ throw new Error(`Failed to get subscription products: ${response.error}`);
219
+ }
220
+ return response;
221
+ }
222
+ /**
223
+ * Get product with payment plans
224
+ */
225
+ async getProductWithPaymentPlans(productId) {
226
+ const response = await this.makeRequest(`/api/products/${productId}`);
227
+ if (response.error) {
228
+ throw new Error(`Failed to get product: ${response.error}`);
229
+ }
230
+ return response;
231
+ }
72
232
  /**
73
233
  * Send webhook event
74
234
  */
@@ -121,6 +281,25 @@ class TorqueCheckout {
121
281
  console.warn('Failed to track checkout completion:', error);
122
282
  }
123
283
  }
284
+ /**
285
+ * Track subscription creation for analytics
286
+ */
287
+ async trackSubscriptionCreated(subscriptionId, subscriptionData) {
288
+ try {
289
+ await this.makeRequest('/api/analytics/subscription-created', {
290
+ method: 'POST',
291
+ body: {
292
+ subscriptionId,
293
+ businessId: this.businessId,
294
+ subscriptionData,
295
+ timestamp: Date.now()
296
+ }
297
+ });
298
+ }
299
+ catch (error) {
300
+ console.warn('Failed to track subscription creation:', error);
301
+ }
302
+ }
124
303
  /**
125
304
  * Generate cart hash for caching
126
305
  */
@@ -138,6 +317,24 @@ class TorqueCheckout {
138
317
  }
139
318
  return Math.abs(hash).toString(36);
140
319
  }
320
+ /**
321
+ * Generate subscription hash for caching
322
+ */
323
+ generateSubscriptionHash(subscriptionData) {
324
+ const subscriptionString = JSON.stringify({
325
+ businessId: subscriptionData.businessId,
326
+ productId: subscriptionData.productId,
327
+ customerEmail: subscriptionData.customerEmail,
328
+ paymentPlanId: subscriptionData.paymentPlanId
329
+ });
330
+ let hash = 0;
331
+ for (let i = 0; i < subscriptionString.length; i++) {
332
+ const char = subscriptionString.charCodeAt(i);
333
+ hash = ((hash << 5) - hash) + char;
334
+ hash = hash & hash;
335
+ }
336
+ return Math.abs(hash).toString(36);
337
+ }
141
338
  /**
142
339
  * Make HTTP request to Torque API
143
340
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["export interface CartItem {\n productId: string\n quantity: number\n variant?: string\n price?: number\n metadata?: Record<string, any>\n}\n\nexport interface CustomerData {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n shippingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n billingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n}\n\nexport interface CartOptions {\n domain?: string\n expiresIn?: number\n metadata?: Record<string, any>\n redirectUrl?: string\n}\n\nexport interface CartData {\n items: CartItem[]\n customer?: CustomerData\n options?: CartOptions\n}\n\nexport interface TorqueConfig {\n businessId?: string\n apiKey?: string\n timeout?: number\n}\n\nexport interface BusinessCreationData {\n name: string\n description?: string\n email: string\n phone?: string\n website?: string\n currency?: string\n timezone?: string\n walletAddress: string\n logo?: string\n}\n\nexport interface BusinessProfile {\n id: string\n name: string\n email: string\n apiKey: string\n walletAddress: string\n logo?: string\n website?: string\n status: 'active' | 'pending' | 'suspended'\n}\n\nexport interface CheckoutResponse {\n success: boolean\n checkoutUrl: string\n expiresAt: string\n cartSummary: {\n itemCount: number\n productCount: number\n estimatedTotal: number\n }\n business: {\n id: string\n name: string\n logo?: string\n }\n}\n\nexport interface OrderStatus {\n orderId: string\n status: string\n customer: {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n } | null\n items: Array<{\n productId: string\n productName: string\n productImage?: string\n quantity: number\n variant?: string\n price: number\n total: number\n }>\n totals: {\n subtotal: number\n shipping: number\n tax: number\n total: number\n }\n paymentStatus: string\n shippingAddress?: any\n billingAddress?: any\n createdAt: number\n updatedAt: number\n metadata: Record<string, any>\n}\n\nexport interface CartValidation {\n valid: boolean\n errors: string[]\n warnings: string[]\n estimatedTotal: number\n}\n\nexport class TorqueCheckout {\n private businessId: string\n private apiKey: string\n private baseUrl: string = 'https://app.torque.fi'\n private timeout: number\n\n constructor(config: TorqueConfig) {\n this.businessId = config.businessId\n this.apiKey = config.apiKey\n this.timeout = config.timeout || 30000\n }\n\n /**\n * Generate a cart checkout URL\n */\n async generateCartCheckoutUrl(cart: CartData): Promise<string> {\n const response = await this.makeRequest('/api/checkout/generate-link', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: {\n items: cart.items\n },\n customerData: cart.customer,\n options: cart.options\n }\n })\n\n if (!response.success) {\n throw new Error(`Failed to generate checkout URL: ${response.error || 'Unknown error'}`)\n }\n\n return response.checkoutUrl\n }\n\n /**\n * Generate a single product checkout URL\n */\n async generateProductCheckoutUrl(productId: string, quantity: number = 1, customer?: CustomerData, options?: CartOptions): Promise<string> {\n return this.generateCartCheckoutUrl({\n items: [{ productId, quantity }],\n customer,\n options\n })\n }\n\n /**\n * Validate cart data before checkout\n */\n async validateCart(cart: CartData): Promise<CartValidation> {\n try {\n const response = await this.makeRequest('/api/checkout/validate-cart', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: cart.items,\n customer: cart.customer\n }\n })\n\n return response\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : 'Validation failed'],\n warnings: [],\n estimatedTotal: 0\n }\n }\n }\n\n /**\n * Get order status\n */\n async getOrderStatus(orderId: string): Promise<OrderStatus> {\n const response = await this.makeRequest(`/api/checkout/order-status/${orderId}?businessId=${this.businessId}`)\n \n if (response.error) {\n throw new Error(`Failed to get order status: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Send webhook event\n */\n async sendWebhookEvent(orderId: string, status: string, customerData?: any, metadata?: Record<string, any>): Promise<void> {\n await this.makeRequest('/api/webhooks/order-update', {\n method: 'POST',\n body: {\n orderId,\n status,\n customerData,\n metadata\n }\n })\n }\n\n /**\n * Track cart view for analytics\n */\n async trackCartView(cartId: string, cartData: CartData): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/cart-view', {\n method: 'POST',\n body: {\n cartId,\n businessId: this.businessId,\n cartData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track cart view:', error)\n }\n }\n\n /**\n * Track checkout completion for analytics\n */\n async trackCheckoutComplete(orderId: string, checkoutData: any): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/checkout-complete', {\n method: 'POST',\n body: {\n orderId,\n businessId: this.businessId,\n checkoutData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track checkout completion:', error)\n }\n }\n\n /**\n * Generate cart hash for caching\n */\n generateCartHash(cart: CartData): string {\n const cartString = JSON.stringify({\n items: cart.items.sort((a, b) => a.productId.localeCompare(b.productId)),\n customer: cart.customer ? { email: cart.customer.email } : null\n })\n \n // Simple hash function for cart identification\n let hash = 0\n for (let i = 0; i < cartString.length; i++) {\n const char = cartString.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(36)\n }\n\n /**\n * Make HTTP request to Torque API\n */\n private async makeRequest(endpoint: string, options: RequestInit = {}): Promise<any> {\n const url = `${this.baseUrl}${endpoint}`\n \n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n \n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new Error('Request timeout')\n }\n throw error\n }\n \n throw new Error('Request failed')\n }\n }\n}\n\n// Export default instance factory\nexport const createTorqueCheckout = (config: TorqueConfig) => new TorqueCheckout(config)\n\n// Export types\nexport type {\n CartItem,\n CustomerData,\n CartOptions,\n CartData,\n TorqueConfig,\n CheckoutResponse,\n OrderStatus,\n CartValidation\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["export interface CartItem {\n productId: string\n quantity: number\n variant?: string\n price?: number\n metadata?: Record<string, any>\n}\n\nexport interface CustomerData {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n shippingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n billingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n}\n\nexport interface CartOptions {\n domain?: string\n expiresIn?: number\n metadata?: Record<string, any>\n redirectUrl?: string\n}\n\nexport interface CartData {\n items: CartItem[]\n customer?: CustomerData\n options?: CartOptions\n}\n\n// New: Payment Plan Interface\nexport interface PaymentPlan {\n id: string\n name: string\n price: number\n interval: \"weekly\" | \"monthly\" | \"quarterly\" | \"yearly\"\n intervalCount: number\n trialDays?: number\n maxCycles?: number\n description?: string\n}\n\n// New: Subscription Product Interface\nexport interface SubscriptionProduct {\n id: string\n name: string\n description?: string\n isSubscription: boolean\n paymentPlans?: PaymentPlan[]\n subscriptionContract?: {\n address: string\n chainId: number\n abi?: string\n }\n basePrice: number\n currency: string\n image?: string\n images?: string[]\n requiresShipping: boolean\n shippingCost?: number\n taxRate?: number\n inventory: number\n status: 'active' | 'inactive' | 'draft' | 'archived'\n sku?: string\n category?: string\n tags?: string[]\n variants?: Array<{\n id: string\n name: string\n price: number\n inventory?: number\n }>\n metadata?: any\n createdAt: number\n updatedAt: number\n}\n\n// New: Subscription Interface\nexport interface Subscription {\n id: string\n businessId: string\n productId: string\n customerId?: string\n customerEmail: string\n customerName: string\n paymentPlanId: string\n status: \"active\" | \"cancelled\" | \"paused\" | \"expired\" | \"past_due\"\n currentPeriodStart: number\n currentPeriodEnd: number\n nextBillingDate: number\n trialStart?: number\n trialEnd?: number\n totalCycles: number\n maxCycles?: number\n lastPaymentDate?: number\n nextPaymentAmount: number\n currency: string\n contractSubscriptionId?: string\n contractAddress?: string\n billingHistory?: Array<{\n cycleNumber: number\n amount: number\n date: number\n status: \"paid\" | \"failed\" | \"pending\"\n transactionId?: string\n }>\n metadata?: any\n createdAt: number\n updatedAt: number\n}\n\n// New: Subscription Creation Data\nexport interface CreateSubscriptionData {\n businessId: string\n productId: string\n customerEmail: string\n customerName: string\n paymentPlanId: string\n customerId?: string\n metadata?: any\n}\n\n// New: Subscription Update Data\nexport interface UpdateSubscriptionData {\n status?: \"active\" | \"cancelled\" | \"paused\" | \"expired\" | \"past_due\"\n pauseUntil?: number\n resumeDate?: number\n metadata?: any\n}\n\nexport interface TorqueConfig {\n businessId?: string\n apiKey?: string\n timeout?: number\n}\n\nexport interface BusinessCreationData {\n name: string\n description?: string\n email: string\n phone?: string\n website?: string\n currency?: string\n timezone?: string\n walletAddress: string\n logo?: string\n}\n\nexport interface BusinessProfile {\n id: string\n name: string\n email: string\n apiKey: string\n walletAddress: string\n logo?: string\n website?: string\n status: 'active' | 'pending' | 'suspended'\n}\n\nexport interface CheckoutResponse {\n success: boolean\n checkoutUrl: string\n expiresAt: string\n cartSummary: {\n itemCount: number\n productCount: number\n estimatedTotal: number\n }\n business: {\n id: string\n name: string\n logo?: string\n }\n}\n\nexport interface OrderStatus {\n orderId: string\n status: string\n customer: {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n } | null\n items: Array<{\n productId: string\n productName: string\n productImage?: string\n quantity: number\n variant?: string\n price: number\n total: number\n }>\n totals: {\n subtotal: number\n shipping: number\n tax: number\n total: number\n }\n paymentStatus: string\n shippingAddress?: any\n billingAddress?: any\n createdAt: number\n updatedAt: number\n metadata: Record<string, any>\n}\n\nexport interface CartValidation {\n valid: boolean\n errors: string[]\n warnings: string[]\n estimatedTotal: number\n}\n\nexport class TorqueCheckout {\n private businessId: string\n private apiKey: string\n private baseUrl: string = ''\n private timeout: number\n\n constructor(config: TorqueConfig) {\n this.businessId = config.businessId\n this.apiKey = config.apiKey\n this.timeout = config.timeout || 30000\n }\n\n /**\n * Generate a cart checkout URL\n */\n async generateCartCheckoutUrl(cart: CartData): Promise<string> {\n const response = await this.makeRequest('/api/torque-checkout', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: {\n items: cart.items\n },\n customerData: cart.customer,\n options: cart.options\n }\n })\n\n if (!response.success) {\n throw new Error(`Failed to generate checkout URL: ${response.error || 'Unknown error'}`)\n }\n\n return response.checkoutUrl\n }\n\n /**\n * Generate a single product checkout URL\n */\n async generateProductCheckoutUrl(productId: string, quantity: number = 1, customer?: CustomerData, options?: CartOptions): Promise<string> {\n return this.generateCartCheckoutUrl({\n items: [{ productId, quantity }],\n customer,\n options\n })\n }\n\n /**\n * Generate a subscription checkout URL\n */\n async generateSubscriptionCheckoutUrl(productId: string, paymentPlanId: string, customer?: CustomerData, options?: CartOptions): Promise<string> {\n return this.generateCartCheckoutUrl({\n items: [{ \n productId, \n quantity: 1,\n metadata: { \n isSubscription: true, \n paymentPlanId \n }\n }],\n customer,\n options\n })\n }\n\n /**\n * Validate cart data before checkout\n */\n async validateCart(cart: CartData): Promise<CartValidation> {\n try {\n const response = await this.makeRequest('/api/checkout/validate-cart', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: cart.items,\n customer: cart.customer\n }\n })\n\n return response\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : 'Validation failed'],\n warnings: [],\n estimatedTotal: 0\n }\n }\n }\n\n /**\n * Get order status\n */\n async getOrderStatus(orderId: string): Promise<OrderStatus> {\n const response = await this.makeRequest(`/api/checkout/order-status/${orderId}?businessId=${this.businessId}`)\n \n if (response.error) {\n throw new Error(`Failed to get order status: ${response.error}`)\n }\n\n return response\n }\n\n // New: Subscription Management Methods\n\n /**\n * Create a new subscription\n */\n async createSubscription(data: CreateSubscriptionData): Promise<Subscription> {\n const response = await this.makeRequest('/api/subscriptions/create', {\n method: 'POST',\n body: data\n })\n\n if (response.error) {\n throw new Error(`Failed to create subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscription by ID\n */\n async getSubscription(subscriptionId: string): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}`)\n \n if (response.error) {\n throw new Error(`Failed to get subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscriptions for a business\n */\n async getBusinessSubscriptions(businessId: string, status?: string, limit?: number): Promise<Subscription[]> {\n const params = new URLSearchParams({ businessId })\n if (status) params.append('status', status)\n if (limit) params.append('limit', limit.toString())\n\n const response = await this.makeRequest(`/api/subscriptions/business?${params}`)\n \n if (response.error) {\n throw new Error(`Failed to get business subscriptions: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscriptions for a customer\n */\n async getCustomerSubscriptions(customerEmail: string): Promise<Subscription[]> {\n const response = await this.makeRequest(`/api/subscriptions/customer/${encodeURIComponent(customerEmail)}`)\n \n if (response.error) {\n throw new Error(`Failed to get customer subscriptions: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Update subscription status\n */\n async updateSubscription(subscriptionId: string, data: UpdateSubscriptionData): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/update`, {\n method: 'PUT',\n body: data\n })\n\n if (response.error) {\n throw new Error(`Failed to update subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Cancel subscription\n */\n async cancelSubscription(subscriptionId: string, effectiveDate?: number): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/cancel`, {\n method: 'PUT',\n body: { effectiveDate }\n })\n\n if (response.error) {\n throw new Error(`Failed to cancel subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Pause subscription\n */\n async pauseSubscription(subscriptionId: string, resumeDate?: number): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/pause`, {\n method: 'PUT',\n body: { resumeDate }\n })\n\n if (response.error) {\n throw new Error(`Failed to pause subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Resume subscription\n */\n async resumeSubscription(subscriptionId: string): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/resume`, {\n method: 'PUT'\n })\n\n if (response.error) {\n throw new Error(`Failed to resume subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Process subscription renewal\n */\n async processSubscriptionRenewal(subscriptionId: string): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/renew`, {\n method: 'PUT'\n })\n\n if (response.error) {\n throw new Error(`Failed to process subscription renewal: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscriptions due for renewal\n */\n async getSubscriptionsDueForRenewal(daysAhead: number = 7): Promise<Subscription[]> {\n const response = await this.makeRequest(`/api/subscriptions/due-for-renewal?daysAhead=${daysAhead}`)\n \n if (response.error) {\n throw new Error(`Failed to get subscriptions due for renewal: ${response.error}`)\n }\n\n return response\n }\n\n // New: Product Management Methods\n\n /**\n * Get subscription products for a business\n */\n async getSubscriptionProducts(businessId: string): Promise<SubscriptionProduct[]> {\n const response = await this.makeRequest(`/api/products/subscriptions?businessId=${businessId}`)\n \n if (response.error) {\n throw new Error(`Failed to get subscription products: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get product with payment plans\n */\n async getProductWithPaymentPlans(productId: string): Promise<SubscriptionProduct> {\n const response = await this.makeRequest(`/api/products/${productId}`)\n \n if (response.error) {\n throw new Error(`Failed to get product: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Send webhook event\n */\n async sendWebhookEvent(orderId: string, status: string, customerData?: any, metadata?: Record<string, any>): Promise<void> {\n await this.makeRequest('/api/webhooks/order-update', {\n method: 'POST',\n body: {\n orderId,\n status,\n customerData,\n metadata\n }\n })\n }\n\n /**\n * Track cart view for analytics\n */\n async trackCartView(cartId: string, cartData: CartData): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/cart-view', {\n method: 'POST',\n body: {\n cartId,\n businessId: this.businessId,\n cartData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track cart view:', error)\n }\n }\n\n /**\n * Track checkout completion for analytics\n */\n async trackCheckoutComplete(orderId: string, checkoutData: any): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/checkout-complete', {\n method: 'POST',\n body: {\n orderId,\n businessId: this.businessId,\n checkoutData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track checkout completion:', error)\n }\n }\n\n /**\n * Track subscription creation for analytics\n */\n async trackSubscriptionCreated(subscriptionId: string, subscriptionData: any): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/subscription-created', {\n method: 'POST',\n body: {\n subscriptionId,\n businessId: this.businessId,\n subscriptionData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track subscription creation:', error)\n }\n }\n\n /**\n * Generate cart hash for caching\n */\n generateCartHash(cart: CartData): string {\n const cartString = JSON.stringify({\n items: cart.items.sort((a, b) => a.productId.localeCompare(b.productId)),\n customer: cart.customer ? { email: cart.customer.email } : null\n })\n \n // Simple hash function for cart identification\n let hash = 0\n for (let i = 0; i < cartString.length; i++) {\n const char = cartString.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(36)\n }\n\n /**\n * Generate subscription hash for caching\n */\n generateSubscriptionHash(subscriptionData: CreateSubscriptionData): string {\n const subscriptionString = JSON.stringify({\n businessId: subscriptionData.businessId,\n productId: subscriptionData.productId,\n customerEmail: subscriptionData.customerEmail,\n paymentPlanId: subscriptionData.paymentPlanId\n })\n \n let hash = 0\n for (let i = 0; i < subscriptionString.length; i++) {\n const char = subscriptionString.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash\n }\n return Math.abs(hash).toString(36)\n }\n\n /**\n * Make HTTP request to Torque API\n */\n private async makeRequest(endpoint: string, options: RequestInit = {}): Promise<any> {\n const url = `${this.baseUrl}${endpoint}`\n \n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n \n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new Error('Request timeout')\n }\n throw error\n }\n \n throw new Error('Request failed')\n }\n }\n}\n\n// Export default instance factory\nexport const createTorqueCheckout = (config: TorqueConfig) => new TorqueCheckout(config)\n\n// Export types\nexport type {\n CartItem,\n CustomerData,\n CartOptions,\n CartData,\n PaymentPlan,\n SubscriptionProduct,\n Subscription,\n CreateSubscriptionData,\n UpdateSubscriptionData,\n TorqueConfig,\n CheckoutResponse,\n OrderStatus,\n CartValidation\n}\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  class TorqueCheckout {
4
4
  constructor(config) {
5
- this.baseUrl = 'https://app.torque.fi';
5
+ this.baseUrl = '';
6
6
  this.businessId = config.businessId;
7
7
  this.apiKey = config.apiKey;
8
8
  this.timeout = config.timeout || 30000;
@@ -11,7 +11,7 @@ class TorqueCheckout {
11
11
  * Generate a cart checkout URL
12
12
  */
13
13
  async generateCartCheckoutUrl(cart) {
14
- const response = await this.makeRequest('/api/checkout/generate-link', {
14
+ const response = await this.makeRequest('/api/torque-checkout', {
15
15
  method: 'POST',
16
16
  body: {
17
17
  businessId: this.businessId,
@@ -37,6 +37,23 @@ class TorqueCheckout {
37
37
  options
38
38
  });
39
39
  }
40
+ /**
41
+ * Generate a subscription checkout URL
42
+ */
43
+ async generateSubscriptionCheckoutUrl(productId, paymentPlanId, customer, options) {
44
+ return this.generateCartCheckoutUrl({
45
+ items: [{
46
+ productId,
47
+ quantity: 1,
48
+ metadata: {
49
+ isSubscription: true,
50
+ paymentPlanId
51
+ }
52
+ }],
53
+ customer,
54
+ options
55
+ });
56
+ }
40
57
  /**
41
58
  * Validate cart data before checkout
42
59
  */
@@ -71,6 +88,149 @@ class TorqueCheckout {
71
88
  }
72
89
  return response;
73
90
  }
91
+ // New: Subscription Management Methods
92
+ /**
93
+ * Create a new subscription
94
+ */
95
+ async createSubscription(data) {
96
+ const response = await this.makeRequest('/api/subscriptions/create', {
97
+ method: 'POST',
98
+ body: data
99
+ });
100
+ if (response.error) {
101
+ throw new Error(`Failed to create subscription: ${response.error}`);
102
+ }
103
+ return response;
104
+ }
105
+ /**
106
+ * Get subscription by ID
107
+ */
108
+ async getSubscription(subscriptionId) {
109
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}`);
110
+ if (response.error) {
111
+ throw new Error(`Failed to get subscription: ${response.error}`);
112
+ }
113
+ return response;
114
+ }
115
+ /**
116
+ * Get subscriptions for a business
117
+ */
118
+ async getBusinessSubscriptions(businessId, status, limit) {
119
+ const params = new URLSearchParams({ businessId });
120
+ if (status)
121
+ params.append('status', status);
122
+ if (limit)
123
+ params.append('limit', limit.toString());
124
+ const response = await this.makeRequest(`/api/subscriptions/business?${params}`);
125
+ if (response.error) {
126
+ throw new Error(`Failed to get business subscriptions: ${response.error}`);
127
+ }
128
+ return response;
129
+ }
130
+ /**
131
+ * Get subscriptions for a customer
132
+ */
133
+ async getCustomerSubscriptions(customerEmail) {
134
+ const response = await this.makeRequest(`/api/subscriptions/customer/${encodeURIComponent(customerEmail)}`);
135
+ if (response.error) {
136
+ throw new Error(`Failed to get customer subscriptions: ${response.error}`);
137
+ }
138
+ return response;
139
+ }
140
+ /**
141
+ * Update subscription status
142
+ */
143
+ async updateSubscription(subscriptionId, data) {
144
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/update`, {
145
+ method: 'PUT',
146
+ body: data
147
+ });
148
+ if (response.error) {
149
+ throw new Error(`Failed to update subscription: ${response.error}`);
150
+ }
151
+ return response;
152
+ }
153
+ /**
154
+ * Cancel subscription
155
+ */
156
+ async cancelSubscription(subscriptionId, effectiveDate) {
157
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/cancel`, {
158
+ method: 'PUT',
159
+ body: { effectiveDate }
160
+ });
161
+ if (response.error) {
162
+ throw new Error(`Failed to cancel subscription: ${response.error}`);
163
+ }
164
+ return response;
165
+ }
166
+ /**
167
+ * Pause subscription
168
+ */
169
+ async pauseSubscription(subscriptionId, resumeDate) {
170
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/pause`, {
171
+ method: 'PUT',
172
+ body: { resumeDate }
173
+ });
174
+ if (response.error) {
175
+ throw new Error(`Failed to pause subscription: ${response.error}`);
176
+ }
177
+ return response;
178
+ }
179
+ /**
180
+ * Resume subscription
181
+ */
182
+ async resumeSubscription(subscriptionId) {
183
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/resume`, {
184
+ method: 'PUT'
185
+ });
186
+ if (response.error) {
187
+ throw new Error(`Failed to resume subscription: ${response.error}`);
188
+ }
189
+ return response;
190
+ }
191
+ /**
192
+ * Process subscription renewal
193
+ */
194
+ async processSubscriptionRenewal(subscriptionId) {
195
+ const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/renew`, {
196
+ method: 'PUT'
197
+ });
198
+ if (response.error) {
199
+ throw new Error(`Failed to process subscription renewal: ${response.error}`);
200
+ }
201
+ return response;
202
+ }
203
+ /**
204
+ * Get subscriptions due for renewal
205
+ */
206
+ async getSubscriptionsDueForRenewal(daysAhead = 7) {
207
+ const response = await this.makeRequest(`/api/subscriptions/due-for-renewal?daysAhead=${daysAhead}`);
208
+ if (response.error) {
209
+ throw new Error(`Failed to get subscriptions due for renewal: ${response.error}`);
210
+ }
211
+ return response;
212
+ }
213
+ // New: Product Management Methods
214
+ /**
215
+ * Get subscription products for a business
216
+ */
217
+ async getSubscriptionProducts(businessId) {
218
+ const response = await this.makeRequest(`/api/products/subscriptions?businessId=${businessId}`);
219
+ if (response.error) {
220
+ throw new Error(`Failed to get subscription products: ${response.error}`);
221
+ }
222
+ return response;
223
+ }
224
+ /**
225
+ * Get product with payment plans
226
+ */
227
+ async getProductWithPaymentPlans(productId) {
228
+ const response = await this.makeRequest(`/api/products/${productId}`);
229
+ if (response.error) {
230
+ throw new Error(`Failed to get product: ${response.error}`);
231
+ }
232
+ return response;
233
+ }
74
234
  /**
75
235
  * Send webhook event
76
236
  */
@@ -123,6 +283,25 @@ class TorqueCheckout {
123
283
  console.warn('Failed to track checkout completion:', error);
124
284
  }
125
285
  }
286
+ /**
287
+ * Track subscription creation for analytics
288
+ */
289
+ async trackSubscriptionCreated(subscriptionId, subscriptionData) {
290
+ try {
291
+ await this.makeRequest('/api/analytics/subscription-created', {
292
+ method: 'POST',
293
+ body: {
294
+ subscriptionId,
295
+ businessId: this.businessId,
296
+ subscriptionData,
297
+ timestamp: Date.now()
298
+ }
299
+ });
300
+ }
301
+ catch (error) {
302
+ console.warn('Failed to track subscription creation:', error);
303
+ }
304
+ }
126
305
  /**
127
306
  * Generate cart hash for caching
128
307
  */
@@ -140,6 +319,24 @@ class TorqueCheckout {
140
319
  }
141
320
  return Math.abs(hash).toString(36);
142
321
  }
322
+ /**
323
+ * Generate subscription hash for caching
324
+ */
325
+ generateSubscriptionHash(subscriptionData) {
326
+ const subscriptionString = JSON.stringify({
327
+ businessId: subscriptionData.businessId,
328
+ productId: subscriptionData.productId,
329
+ customerEmail: subscriptionData.customerEmail,
330
+ paymentPlanId: subscriptionData.paymentPlanId
331
+ });
332
+ let hash = 0;
333
+ for (let i = 0; i < subscriptionString.length; i++) {
334
+ const char = subscriptionString.charCodeAt(i);
335
+ hash = ((hash << 5) - hash) + char;
336
+ hash = hash & hash;
337
+ }
338
+ return Math.abs(hash).toString(36);
339
+ }
143
340
  /**
144
341
  * Make HTTP request to Torque API
145
342
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["export interface CartItem {\n productId: string\n quantity: number\n variant?: string\n price?: number\n metadata?: Record<string, any>\n}\n\nexport interface CustomerData {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n shippingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n billingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n}\n\nexport interface CartOptions {\n domain?: string\n expiresIn?: number\n metadata?: Record<string, any>\n redirectUrl?: string\n}\n\nexport interface CartData {\n items: CartItem[]\n customer?: CustomerData\n options?: CartOptions\n}\n\nexport interface TorqueConfig {\n businessId?: string\n apiKey?: string\n timeout?: number\n}\n\nexport interface BusinessCreationData {\n name: string\n description?: string\n email: string\n phone?: string\n website?: string\n currency?: string\n timezone?: string\n walletAddress: string\n logo?: string\n}\n\nexport interface BusinessProfile {\n id: string\n name: string\n email: string\n apiKey: string\n walletAddress: string\n logo?: string\n website?: string\n status: 'active' | 'pending' | 'suspended'\n}\n\nexport interface CheckoutResponse {\n success: boolean\n checkoutUrl: string\n expiresAt: string\n cartSummary: {\n itemCount: number\n productCount: number\n estimatedTotal: number\n }\n business: {\n id: string\n name: string\n logo?: string\n }\n}\n\nexport interface OrderStatus {\n orderId: string\n status: string\n customer: {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n } | null\n items: Array<{\n productId: string\n productName: string\n productImage?: string\n quantity: number\n variant?: string\n price: number\n total: number\n }>\n totals: {\n subtotal: number\n shipping: number\n tax: number\n total: number\n }\n paymentStatus: string\n shippingAddress?: any\n billingAddress?: any\n createdAt: number\n updatedAt: number\n metadata: Record<string, any>\n}\n\nexport interface CartValidation {\n valid: boolean\n errors: string[]\n warnings: string[]\n estimatedTotal: number\n}\n\nexport class TorqueCheckout {\n private businessId: string\n private apiKey: string\n private baseUrl: string = 'https://app.torque.fi'\n private timeout: number\n\n constructor(config: TorqueConfig) {\n this.businessId = config.businessId\n this.apiKey = config.apiKey\n this.timeout = config.timeout || 30000\n }\n\n /**\n * Generate a cart checkout URL\n */\n async generateCartCheckoutUrl(cart: CartData): Promise<string> {\n const response = await this.makeRequest('/api/checkout/generate-link', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: {\n items: cart.items\n },\n customerData: cart.customer,\n options: cart.options\n }\n })\n\n if (!response.success) {\n throw new Error(`Failed to generate checkout URL: ${response.error || 'Unknown error'}`)\n }\n\n return response.checkoutUrl\n }\n\n /**\n * Generate a single product checkout URL\n */\n async generateProductCheckoutUrl(productId: string, quantity: number = 1, customer?: CustomerData, options?: CartOptions): Promise<string> {\n return this.generateCartCheckoutUrl({\n items: [{ productId, quantity }],\n customer,\n options\n })\n }\n\n /**\n * Validate cart data before checkout\n */\n async validateCart(cart: CartData): Promise<CartValidation> {\n try {\n const response = await this.makeRequest('/api/checkout/validate-cart', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: cart.items,\n customer: cart.customer\n }\n })\n\n return response\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : 'Validation failed'],\n warnings: [],\n estimatedTotal: 0\n }\n }\n }\n\n /**\n * Get order status\n */\n async getOrderStatus(orderId: string): Promise<OrderStatus> {\n const response = await this.makeRequest(`/api/checkout/order-status/${orderId}?businessId=${this.businessId}`)\n \n if (response.error) {\n throw new Error(`Failed to get order status: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Send webhook event\n */\n async sendWebhookEvent(orderId: string, status: string, customerData?: any, metadata?: Record<string, any>): Promise<void> {\n await this.makeRequest('/api/webhooks/order-update', {\n method: 'POST',\n body: {\n orderId,\n status,\n customerData,\n metadata\n }\n })\n }\n\n /**\n * Track cart view for analytics\n */\n async trackCartView(cartId: string, cartData: CartData): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/cart-view', {\n method: 'POST',\n body: {\n cartId,\n businessId: this.businessId,\n cartData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track cart view:', error)\n }\n }\n\n /**\n * Track checkout completion for analytics\n */\n async trackCheckoutComplete(orderId: string, checkoutData: any): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/checkout-complete', {\n method: 'POST',\n body: {\n orderId,\n businessId: this.businessId,\n checkoutData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track checkout completion:', error)\n }\n }\n\n /**\n * Generate cart hash for caching\n */\n generateCartHash(cart: CartData): string {\n const cartString = JSON.stringify({\n items: cart.items.sort((a, b) => a.productId.localeCompare(b.productId)),\n customer: cart.customer ? { email: cart.customer.email } : null\n })\n \n // Simple hash function for cart identification\n let hash = 0\n for (let i = 0; i < cartString.length; i++) {\n const char = cartString.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(36)\n }\n\n /**\n * Make HTTP request to Torque API\n */\n private async makeRequest(endpoint: string, options: RequestInit = {}): Promise<any> {\n const url = `${this.baseUrl}${endpoint}`\n \n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n \n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new Error('Request timeout')\n }\n throw error\n }\n \n throw new Error('Request failed')\n }\n }\n}\n\n// Export default instance factory\nexport const createTorqueCheckout = (config: TorqueConfig) => new TorqueCheckout(config)\n\n// Export types\nexport type {\n CartItem,\n CustomerData,\n CartOptions,\n CartData,\n TorqueConfig,\n CheckoutResponse,\n OrderStatus,\n CartValidation\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["export interface CartItem {\n productId: string\n quantity: number\n variant?: string\n price?: number\n metadata?: Record<string, any>\n}\n\nexport interface CustomerData {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n shippingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n billingAddress?: {\n street: string\n city: string\n state: string\n zipCode: string\n country: string\n }\n}\n\nexport interface CartOptions {\n domain?: string\n expiresIn?: number\n metadata?: Record<string, any>\n redirectUrl?: string\n}\n\nexport interface CartData {\n items: CartItem[]\n customer?: CustomerData\n options?: CartOptions\n}\n\n// New: Payment Plan Interface\nexport interface PaymentPlan {\n id: string\n name: string\n price: number\n interval: \"weekly\" | \"monthly\" | \"quarterly\" | \"yearly\"\n intervalCount: number\n trialDays?: number\n maxCycles?: number\n description?: string\n}\n\n// New: Subscription Product Interface\nexport interface SubscriptionProduct {\n id: string\n name: string\n description?: string\n isSubscription: boolean\n paymentPlans?: PaymentPlan[]\n subscriptionContract?: {\n address: string\n chainId: number\n abi?: string\n }\n basePrice: number\n currency: string\n image?: string\n images?: string[]\n requiresShipping: boolean\n shippingCost?: number\n taxRate?: number\n inventory: number\n status: 'active' | 'inactive' | 'draft' | 'archived'\n sku?: string\n category?: string\n tags?: string[]\n variants?: Array<{\n id: string\n name: string\n price: number\n inventory?: number\n }>\n metadata?: any\n createdAt: number\n updatedAt: number\n}\n\n// New: Subscription Interface\nexport interface Subscription {\n id: string\n businessId: string\n productId: string\n customerId?: string\n customerEmail: string\n customerName: string\n paymentPlanId: string\n status: \"active\" | \"cancelled\" | \"paused\" | \"expired\" | \"past_due\"\n currentPeriodStart: number\n currentPeriodEnd: number\n nextBillingDate: number\n trialStart?: number\n trialEnd?: number\n totalCycles: number\n maxCycles?: number\n lastPaymentDate?: number\n nextPaymentAmount: number\n currency: string\n contractSubscriptionId?: string\n contractAddress?: string\n billingHistory?: Array<{\n cycleNumber: number\n amount: number\n date: number\n status: \"paid\" | \"failed\" | \"pending\"\n transactionId?: string\n }>\n metadata?: any\n createdAt: number\n updatedAt: number\n}\n\n// New: Subscription Creation Data\nexport interface CreateSubscriptionData {\n businessId: string\n productId: string\n customerEmail: string\n customerName: string\n paymentPlanId: string\n customerId?: string\n metadata?: any\n}\n\n// New: Subscription Update Data\nexport interface UpdateSubscriptionData {\n status?: \"active\" | \"cancelled\" | \"paused\" | \"expired\" | \"past_due\"\n pauseUntil?: number\n resumeDate?: number\n metadata?: any\n}\n\nexport interface TorqueConfig {\n businessId?: string\n apiKey?: string\n timeout?: number\n}\n\nexport interface BusinessCreationData {\n name: string\n description?: string\n email: string\n phone?: string\n website?: string\n currency?: string\n timezone?: string\n walletAddress: string\n logo?: string\n}\n\nexport interface BusinessProfile {\n id: string\n name: string\n email: string\n apiKey: string\n walletAddress: string\n logo?: string\n website?: string\n status: 'active' | 'pending' | 'suspended'\n}\n\nexport interface CheckoutResponse {\n success: boolean\n checkoutUrl: string\n expiresAt: string\n cartSummary: {\n itemCount: number\n productCount: number\n estimatedTotal: number\n }\n business: {\n id: string\n name: string\n logo?: string\n }\n}\n\nexport interface OrderStatus {\n orderId: string\n status: string\n customer: {\n email: string\n firstName?: string\n lastName?: string\n phone?: string\n } | null\n items: Array<{\n productId: string\n productName: string\n productImage?: string\n quantity: number\n variant?: string\n price: number\n total: number\n }>\n totals: {\n subtotal: number\n shipping: number\n tax: number\n total: number\n }\n paymentStatus: string\n shippingAddress?: any\n billingAddress?: any\n createdAt: number\n updatedAt: number\n metadata: Record<string, any>\n}\n\nexport interface CartValidation {\n valid: boolean\n errors: string[]\n warnings: string[]\n estimatedTotal: number\n}\n\nexport class TorqueCheckout {\n private businessId: string\n private apiKey: string\n private baseUrl: string = ''\n private timeout: number\n\n constructor(config: TorqueConfig) {\n this.businessId = config.businessId\n this.apiKey = config.apiKey\n this.timeout = config.timeout || 30000\n }\n\n /**\n * Generate a cart checkout URL\n */\n async generateCartCheckoutUrl(cart: CartData): Promise<string> {\n const response = await this.makeRequest('/api/torque-checkout', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: {\n items: cart.items\n },\n customerData: cart.customer,\n options: cart.options\n }\n })\n\n if (!response.success) {\n throw new Error(`Failed to generate checkout URL: ${response.error || 'Unknown error'}`)\n }\n\n return response.checkoutUrl\n }\n\n /**\n * Generate a single product checkout URL\n */\n async generateProductCheckoutUrl(productId: string, quantity: number = 1, customer?: CustomerData, options?: CartOptions): Promise<string> {\n return this.generateCartCheckoutUrl({\n items: [{ productId, quantity }],\n customer,\n options\n })\n }\n\n /**\n * Generate a subscription checkout URL\n */\n async generateSubscriptionCheckoutUrl(productId: string, paymentPlanId: string, customer?: CustomerData, options?: CartOptions): Promise<string> {\n return this.generateCartCheckoutUrl({\n items: [{ \n productId, \n quantity: 1,\n metadata: { \n isSubscription: true, \n paymentPlanId \n }\n }],\n customer,\n options\n })\n }\n\n /**\n * Validate cart data before checkout\n */\n async validateCart(cart: CartData): Promise<CartValidation> {\n try {\n const response = await this.makeRequest('/api/checkout/validate-cart', {\n method: 'POST',\n body: {\n businessId: this.businessId,\n cart: cart.items,\n customer: cart.customer\n }\n })\n\n return response\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : 'Validation failed'],\n warnings: [],\n estimatedTotal: 0\n }\n }\n }\n\n /**\n * Get order status\n */\n async getOrderStatus(orderId: string): Promise<OrderStatus> {\n const response = await this.makeRequest(`/api/checkout/order-status/${orderId}?businessId=${this.businessId}`)\n \n if (response.error) {\n throw new Error(`Failed to get order status: ${response.error}`)\n }\n\n return response\n }\n\n // New: Subscription Management Methods\n\n /**\n * Create a new subscription\n */\n async createSubscription(data: CreateSubscriptionData): Promise<Subscription> {\n const response = await this.makeRequest('/api/subscriptions/create', {\n method: 'POST',\n body: data\n })\n\n if (response.error) {\n throw new Error(`Failed to create subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscription by ID\n */\n async getSubscription(subscriptionId: string): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}`)\n \n if (response.error) {\n throw new Error(`Failed to get subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscriptions for a business\n */\n async getBusinessSubscriptions(businessId: string, status?: string, limit?: number): Promise<Subscription[]> {\n const params = new URLSearchParams({ businessId })\n if (status) params.append('status', status)\n if (limit) params.append('limit', limit.toString())\n\n const response = await this.makeRequest(`/api/subscriptions/business?${params}`)\n \n if (response.error) {\n throw new Error(`Failed to get business subscriptions: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscriptions for a customer\n */\n async getCustomerSubscriptions(customerEmail: string): Promise<Subscription[]> {\n const response = await this.makeRequest(`/api/subscriptions/customer/${encodeURIComponent(customerEmail)}`)\n \n if (response.error) {\n throw new Error(`Failed to get customer subscriptions: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Update subscription status\n */\n async updateSubscription(subscriptionId: string, data: UpdateSubscriptionData): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/update`, {\n method: 'PUT',\n body: data\n })\n\n if (response.error) {\n throw new Error(`Failed to update subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Cancel subscription\n */\n async cancelSubscription(subscriptionId: string, effectiveDate?: number): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/cancel`, {\n method: 'PUT',\n body: { effectiveDate }\n })\n\n if (response.error) {\n throw new Error(`Failed to cancel subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Pause subscription\n */\n async pauseSubscription(subscriptionId: string, resumeDate?: number): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/pause`, {\n method: 'PUT',\n body: { resumeDate }\n })\n\n if (response.error) {\n throw new Error(`Failed to pause subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Resume subscription\n */\n async resumeSubscription(subscriptionId: string): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/resume`, {\n method: 'PUT'\n })\n\n if (response.error) {\n throw new Error(`Failed to resume subscription: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Process subscription renewal\n */\n async processSubscriptionRenewal(subscriptionId: string): Promise<Subscription> {\n const response = await this.makeRequest(`/api/subscriptions/${subscriptionId}/renew`, {\n method: 'PUT'\n })\n\n if (response.error) {\n throw new Error(`Failed to process subscription renewal: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get subscriptions due for renewal\n */\n async getSubscriptionsDueForRenewal(daysAhead: number = 7): Promise<Subscription[]> {\n const response = await this.makeRequest(`/api/subscriptions/due-for-renewal?daysAhead=${daysAhead}`)\n \n if (response.error) {\n throw new Error(`Failed to get subscriptions due for renewal: ${response.error}`)\n }\n\n return response\n }\n\n // New: Product Management Methods\n\n /**\n * Get subscription products for a business\n */\n async getSubscriptionProducts(businessId: string): Promise<SubscriptionProduct[]> {\n const response = await this.makeRequest(`/api/products/subscriptions?businessId=${businessId}`)\n \n if (response.error) {\n throw new Error(`Failed to get subscription products: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Get product with payment plans\n */\n async getProductWithPaymentPlans(productId: string): Promise<SubscriptionProduct> {\n const response = await this.makeRequest(`/api/products/${productId}`)\n \n if (response.error) {\n throw new Error(`Failed to get product: ${response.error}`)\n }\n\n return response\n }\n\n /**\n * Send webhook event\n */\n async sendWebhookEvent(orderId: string, status: string, customerData?: any, metadata?: Record<string, any>): Promise<void> {\n await this.makeRequest('/api/webhooks/order-update', {\n method: 'POST',\n body: {\n orderId,\n status,\n customerData,\n metadata\n }\n })\n }\n\n /**\n * Track cart view for analytics\n */\n async trackCartView(cartId: string, cartData: CartData): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/cart-view', {\n method: 'POST',\n body: {\n cartId,\n businessId: this.businessId,\n cartData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track cart view:', error)\n }\n }\n\n /**\n * Track checkout completion for analytics\n */\n async trackCheckoutComplete(orderId: string, checkoutData: any): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/checkout-complete', {\n method: 'POST',\n body: {\n orderId,\n businessId: this.businessId,\n checkoutData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track checkout completion:', error)\n }\n }\n\n /**\n * Track subscription creation for analytics\n */\n async trackSubscriptionCreated(subscriptionId: string, subscriptionData: any): Promise<void> {\n try {\n await this.makeRequest('/api/analytics/subscription-created', {\n method: 'POST',\n body: {\n subscriptionId,\n businessId: this.businessId,\n subscriptionData,\n timestamp: Date.now()\n }\n })\n } catch (error) {\n console.warn('Failed to track subscription creation:', error)\n }\n }\n\n /**\n * Generate cart hash for caching\n */\n generateCartHash(cart: CartData): string {\n const cartString = JSON.stringify({\n items: cart.items.sort((a, b) => a.productId.localeCompare(b.productId)),\n customer: cart.customer ? { email: cart.customer.email } : null\n })\n \n // Simple hash function for cart identification\n let hash = 0\n for (let i = 0; i < cartString.length; i++) {\n const char = cartString.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(36)\n }\n\n /**\n * Generate subscription hash for caching\n */\n generateSubscriptionHash(subscriptionData: CreateSubscriptionData): string {\n const subscriptionString = JSON.stringify({\n businessId: subscriptionData.businessId,\n productId: subscriptionData.productId,\n customerEmail: subscriptionData.customerEmail,\n paymentPlanId: subscriptionData.paymentPlanId\n })\n \n let hash = 0\n for (let i = 0; i < subscriptionString.length; i++) {\n const char = subscriptionString.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash\n }\n return Math.abs(hash).toString(36)\n }\n\n /**\n * Make HTTP request to Torque API\n */\n private async makeRequest(endpoint: string, options: RequestInit = {}): Promise<any> {\n const url = `${this.baseUrl}${endpoint}`\n \n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n \n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new Error('Request timeout')\n }\n throw error\n }\n \n throw new Error('Request failed')\n }\n }\n}\n\n// Export default instance factory\nexport const createTorqueCheckout = (config: TorqueConfig) => new TorqueCheckout(config)\n\n// Export types\nexport type {\n CartItem,\n CustomerData,\n CartOptions,\n CartData,\n PaymentPlan,\n SubscriptionProduct,\n Subscription,\n CreateSubscriptionData,\n UpdateSubscriptionData,\n TorqueConfig,\n CheckoutResponse,\n OrderStatus,\n CartValidation\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "torque-checkout",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "Official Torque checkout SDK for ecommerce integrations",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -29,12 +29,12 @@
29
29
  "license": "MIT",
30
30
  "repository": {
31
31
  "type": "git",
32
- "url": "https://github.com/camconrad/torque_webapp.git"
32
+ "url": "https://github.com/torquefi/checkout.git"
33
33
  },
34
34
  "bugs": {
35
- "url": "https://github.com/camconrad/torque_webapp/issues"
35
+ "url": "ttps://torque.fi"
36
36
  },
37
- "homepage": "https://github.com/camconrad/torque_webapp",
37
+ "homepage": "https://torque.fi",
38
38
  "devDependencies": {
39
39
  "@rollup/plugin-typescript": "^12.1.4",
40
40
  "@types/node": "^20.0.0",