@blazium/sdk 1.0.4 → 1.0.6

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/dist/index.d.mts CHANGED
@@ -11,9 +11,8 @@ declare enum BlaziumFiat {
11
11
  TRY = "TRY"
12
12
  }
13
13
  declare enum PaymentStatus {
14
- CREATED = "CREATED",
15
14
  PENDING = "PENDING",
16
- PARTIALLY_PAID = "PARTIALLY_PAID",
15
+ PARTIALLY_PAID = "PARTIALLY_PAID",// Tracked via payment metadata (not a DB status)
17
16
  CONFIRMED = "CONFIRMED",
18
17
  FAILED = "FAILED",
19
18
  EXPIRED = "EXPIRED",
@@ -190,6 +189,25 @@ interface WithdrawalRequest {
190
189
  amount: number;
191
190
  destinationAddress: string;
192
191
  }
192
+ /**
193
+ * Parameters for creating a payment via the drop-in button endpoint.
194
+ * This uses the /api/v1/payments/button endpoint which accepts
195
+ * the API key in the body instead of the Authorization header.
196
+ */
197
+ interface ButtonPaymentParams {
198
+ amount: number;
199
+ currency: string;
200
+ description?: string;
201
+ metadata?: Record<string, unknown>;
202
+ redirectUrl?: string;
203
+ cancelUrl?: string;
204
+ expiresIn?: number;
205
+ }
206
+ interface ButtonPaymentResponse {
207
+ id: string;
208
+ checkoutUrl: string;
209
+ status: string;
210
+ }
193
211
 
194
212
  declare class BlaziumError extends Error {
195
213
  code: string;
@@ -321,13 +339,34 @@ declare class BlaziumPayClient {
321
339
  parseWebhook(rawPayload: string, signature: string): WebhookPayload;
322
340
  private normalizePayment;
323
341
  private sleep;
324
- private isFinalStatus;
325
342
  isFinal(payment: Payment): boolean;
326
343
  isPaid(payment: Payment): boolean;
327
344
  isPartiallyPaid(payment: Payment): boolean;
328
345
  isExpired(payment: Payment): boolean;
329
346
  getPaymentProgress(payment: Payment): number;
330
347
  formatAmount(amount: number, currency: string): string;
348
+ /**
349
+ * Create a payment via the drop-in button endpoint.
350
+ *
351
+ * This is designed for client-side usage where the API key is sent in the
352
+ * request body (not the Authorization header). It returns a checkout URL
353
+ * that you can redirect the user to.
354
+ *
355
+ * Use this when you want to replicate the behavior of the pay-button.js widget
356
+ * programmatically.
357
+ *
358
+ * @example
359
+ * ```ts
360
+ * const result = await client.createButtonPayment({
361
+ * amount: 10.00,
362
+ * currency: 'USD',
363
+ * description: 'Premium Plan',
364
+ * redirectUrl: 'https://myapp.com/success',
365
+ * });
366
+ * // Redirect user to result.checkoutUrl
367
+ * ```
368
+ */
369
+ createButtonPayment(params: ButtonPaymentParams): Promise<ButtonPaymentResponse>;
331
370
  }
332
371
 
333
- export { APIError, AuthenticationError, BlaziumChain, type BlaziumConfig, type BlaziumConfigInternal, BlaziumConfigSchema, BlaziumEnvironment, BlaziumError, BlaziumFiat, BlaziumPayClient, type CreatePaymentOptions, type CreatePaymentParams, CreatePaymentSchema, InsufficientPaymentError, InvalidSignatureError, type ListPaymentsParams, type MerchantBalance, NetworkError, type PaginatedResponse, type Payment, PaymentError, PaymentExpiredError, PaymentNotFoundError, type PaymentStats, PaymentStatus, RateLimitError, TimeoutError, ValidationError, WebhookError, WebhookEventType, type WebhookPayload, type Withdrawal, type WithdrawalRequest, WithdrawalStatus };
372
+ export { APIError, AuthenticationError, BlaziumChain, type BlaziumConfig, type BlaziumConfigInternal, BlaziumConfigSchema, BlaziumEnvironment, BlaziumError, BlaziumFiat, BlaziumPayClient, type ButtonPaymentParams, type ButtonPaymentResponse, type CreatePaymentOptions, type CreatePaymentParams, CreatePaymentSchema, InsufficientPaymentError, InvalidSignatureError, type ListPaymentsParams, type MerchantBalance, NetworkError, type PaginatedResponse, type Payment, PaymentError, PaymentExpiredError, PaymentNotFoundError, type PaymentStats, PaymentStatus, RateLimitError, TimeoutError, ValidationError, WebhookError, WebhookEventType, type WebhookPayload, type Withdrawal, type WithdrawalRequest, WithdrawalStatus };
package/dist/index.d.ts CHANGED
@@ -11,9 +11,8 @@ declare enum BlaziumFiat {
11
11
  TRY = "TRY"
12
12
  }
13
13
  declare enum PaymentStatus {
14
- CREATED = "CREATED",
15
14
  PENDING = "PENDING",
16
- PARTIALLY_PAID = "PARTIALLY_PAID",
15
+ PARTIALLY_PAID = "PARTIALLY_PAID",// Tracked via payment metadata (not a DB status)
17
16
  CONFIRMED = "CONFIRMED",
18
17
  FAILED = "FAILED",
19
18
  EXPIRED = "EXPIRED",
@@ -190,6 +189,25 @@ interface WithdrawalRequest {
190
189
  amount: number;
191
190
  destinationAddress: string;
192
191
  }
192
+ /**
193
+ * Parameters for creating a payment via the drop-in button endpoint.
194
+ * This uses the /api/v1/payments/button endpoint which accepts
195
+ * the API key in the body instead of the Authorization header.
196
+ */
197
+ interface ButtonPaymentParams {
198
+ amount: number;
199
+ currency: string;
200
+ description?: string;
201
+ metadata?: Record<string, unknown>;
202
+ redirectUrl?: string;
203
+ cancelUrl?: string;
204
+ expiresIn?: number;
205
+ }
206
+ interface ButtonPaymentResponse {
207
+ id: string;
208
+ checkoutUrl: string;
209
+ status: string;
210
+ }
193
211
 
194
212
  declare class BlaziumError extends Error {
195
213
  code: string;
@@ -321,13 +339,34 @@ declare class BlaziumPayClient {
321
339
  parseWebhook(rawPayload: string, signature: string): WebhookPayload;
322
340
  private normalizePayment;
323
341
  private sleep;
324
- private isFinalStatus;
325
342
  isFinal(payment: Payment): boolean;
326
343
  isPaid(payment: Payment): boolean;
327
344
  isPartiallyPaid(payment: Payment): boolean;
328
345
  isExpired(payment: Payment): boolean;
329
346
  getPaymentProgress(payment: Payment): number;
330
347
  formatAmount(amount: number, currency: string): string;
348
+ /**
349
+ * Create a payment via the drop-in button endpoint.
350
+ *
351
+ * This is designed for client-side usage where the API key is sent in the
352
+ * request body (not the Authorization header). It returns a checkout URL
353
+ * that you can redirect the user to.
354
+ *
355
+ * Use this when you want to replicate the behavior of the pay-button.js widget
356
+ * programmatically.
357
+ *
358
+ * @example
359
+ * ```ts
360
+ * const result = await client.createButtonPayment({
361
+ * amount: 10.00,
362
+ * currency: 'USD',
363
+ * description: 'Premium Plan',
364
+ * redirectUrl: 'https://myapp.com/success',
365
+ * });
366
+ * // Redirect user to result.checkoutUrl
367
+ * ```
368
+ */
369
+ createButtonPayment(params: ButtonPaymentParams): Promise<ButtonPaymentResponse>;
331
370
  }
332
371
 
333
- export { APIError, AuthenticationError, BlaziumChain, type BlaziumConfig, type BlaziumConfigInternal, BlaziumConfigSchema, BlaziumEnvironment, BlaziumError, BlaziumFiat, BlaziumPayClient, type CreatePaymentOptions, type CreatePaymentParams, CreatePaymentSchema, InsufficientPaymentError, InvalidSignatureError, type ListPaymentsParams, type MerchantBalance, NetworkError, type PaginatedResponse, type Payment, PaymentError, PaymentExpiredError, PaymentNotFoundError, type PaymentStats, PaymentStatus, RateLimitError, TimeoutError, ValidationError, WebhookError, WebhookEventType, type WebhookPayload, type Withdrawal, type WithdrawalRequest, WithdrawalStatus };
372
+ export { APIError, AuthenticationError, BlaziumChain, type BlaziumConfig, type BlaziumConfigInternal, BlaziumConfigSchema, BlaziumEnvironment, BlaziumError, BlaziumFiat, BlaziumPayClient, type ButtonPaymentParams, type ButtonPaymentResponse, type CreatePaymentOptions, type CreatePaymentParams, CreatePaymentSchema, InsufficientPaymentError, InvalidSignatureError, type ListPaymentsParams, type MerchantBalance, NetworkError, type PaginatedResponse, type Payment, PaymentError, PaymentExpiredError, PaymentNotFoundError, type PaymentStats, PaymentStatus, RateLimitError, TimeoutError, ValidationError, WebhookError, WebhookEventType, type WebhookPayload, type Withdrawal, type WithdrawalRequest, WithdrawalStatus };
package/dist/index.js CHANGED
@@ -22,7 +22,6 @@ var BlaziumFiat = /* @__PURE__ */ ((BlaziumFiat2) => {
22
22
  return BlaziumFiat2;
23
23
  })(BlaziumFiat || {});
24
24
  var PaymentStatus = /* @__PURE__ */ ((PaymentStatus2) => {
25
- PaymentStatus2["CREATED"] = "CREATED";
26
25
  PaymentStatus2["PENDING"] = "PENDING";
27
26
  PaymentStatus2["PARTIALLY_PAID"] = "PARTIALLY_PAID";
28
27
  PaymentStatus2["CONFIRMED"] = "CONFIRMED";
@@ -461,16 +460,13 @@ var BlaziumPayClient = class {
461
460
  sleep(ms) {
462
461
  return new Promise((resolve) => setTimeout(resolve, ms));
463
462
  }
464
- isFinalStatus(status) {
463
+ isFinal(payment) {
465
464
  return [
466
465
  "CONFIRMED" /* CONFIRMED */,
467
466
  "FAILED" /* FAILED */,
468
467
  "EXPIRED" /* EXPIRED */,
469
468
  "CANCELLED" /* CANCELLED */
470
- ].includes(status);
471
- }
472
- isFinal(payment) {
473
- return this.isFinalStatus(payment.status);
469
+ ].includes(payment.status);
474
470
  }
475
471
  isPaid(payment) {
476
472
  return payment.status === "CONFIRMED" /* CONFIRMED */;
@@ -503,6 +499,50 @@ var BlaziumPayClient = class {
503
499
  const decimalPlaces = decimals[currency.toUpperCase()] || 4;
504
500
  return `${amount.toFixed(decimalPlaces)} ${currency.toUpperCase()}`;
505
501
  }
502
+ /**
503
+ * Create a payment via the drop-in button endpoint.
504
+ *
505
+ * This is designed for client-side usage where the API key is sent in the
506
+ * request body (not the Authorization header). It returns a checkout URL
507
+ * that you can redirect the user to.
508
+ *
509
+ * Use this when you want to replicate the behavior of the pay-button.js widget
510
+ * programmatically.
511
+ *
512
+ * @example
513
+ * ```ts
514
+ * const result = await client.createButtonPayment({
515
+ * amount: 10.00,
516
+ * currency: 'USD',
517
+ * description: 'Premium Plan',
518
+ * redirectUrl: 'https://myapp.com/success',
519
+ * });
520
+ * // Redirect user to result.checkoutUrl
521
+ * ```
522
+ */
523
+ async createButtonPayment(params) {
524
+ if (!params.amount || params.amount <= 0) {
525
+ throw new ValidationError("Amount must be positive");
526
+ }
527
+ if (!params.currency) {
528
+ throw new ValidationError("Currency is required");
529
+ }
530
+ const response = await this.client.post("/payments/button", {
531
+ apiKey: this.config.apiKey,
532
+ amount: params.amount,
533
+ currency: params.currency.toUpperCase(),
534
+ description: params.description,
535
+ metadata: params.metadata,
536
+ redirectUrl: params.redirectUrl,
537
+ cancelUrl: params.cancelUrl,
538
+ expiresIn: params.expiresIn
539
+ });
540
+ return {
541
+ id: response.data.id,
542
+ checkoutUrl: response.data.checkoutUrl,
543
+ status: response.data.status
544
+ };
545
+ }
506
546
  };
507
547
 
508
548
  exports.APIError = APIError;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/client.ts"],"names":["BlaziumChain","BlaziumFiat","PaymentStatus","BlaziumEnvironment","WithdrawalStatus","z","WebhookEventType","axios","config","createHmac","timingSafeEqual"],"mappings":";;;;;;;;;;;AAKO,IAAK,YAAA,qBAAAA,aAAAA,KAAL;AACL,EAAAA,cAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,cAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,cAAA,KAAA,CAAA,GAAM,KAAA;AAHI,EAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAML,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACL,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AAHI,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAML,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AACL,EAAAA,eAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,eAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,eAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,eAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,eAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,eAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,eAAA,WAAA,CAAA,GAAY,WAAA;AAPF,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;AAUL,IAAK,kBAAA,qBAAAC,mBAAAA,KAAL;AACL,EAAAA,oBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,oBAAA,SAAA,CAAA,GAAU,SAAA;AAFA,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;AAKL,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACL,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,kBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,kBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AALF,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AASL,IAAM,mBAAA,GAAsBC,MAAE,MAAA,CAAO;AAAA,EAC1C,QAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,qBAAqB,CAAA;AAAA,EAC/C,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,mCAAmC,CAAA;AAAA,EAChF,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAK,CAAA;AAAA,EACnD,WAAA,EAAaA,MAAE,UAAA,CAAW,kBAAkB,EAAE,QAAA,EAAS,CAAE,QAAQ,YAAA,kBAA6B;AAAA,EAC9F,aAAA,EAAeA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC5B,CAAC;AA+CM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB,CAAA;AAAA,EACrD,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,WAAA,EAAY;AAAA,EAC/C,aAAaA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC1C,UAAUA,KAAA,CAAE,MAAA,CAAOA,MAAE,OAAA,EAAS,EAAE,QAAA,EAAS;AAAA,EACzC,aAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACvC,WAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACrC,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,GAAA,CAAI,KAAK,CAAA,CAAE,QAAA,EAAS;AAAA;AAAA;AAAA,EAGlD,YAAA,EAAcA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,cAAA,EAAgBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,YAAYA,KAAA,CAAE,MAAA,CAAOA,MAAE,OAAA,EAAS,EAAE,QAAA;AACpC,CAAC;AAQM,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACL,EAAAA,kBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,kBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,kBAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,kBAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,kBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,kBAAA,wBAAA,CAAA,GAAyB,wBAAA;AANf,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;;;ACjHL,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EAItC,WAAA,CAAY,OAAA,EAAiB,IAAA,GAAe,eAAA,EAAiB,OAAA,EAAmB;AAC9E,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAGf,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,MAAA,KAAA,CAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA;AAAA,IAChD;AAEA,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAS;AACP,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AACF;AAEO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,WAAA,CAAY,UAAkB,0BAAA,EAA4B;AACxD,IAAA,KAAA,CAAM,SAAS,sBAAsB,CAAA;AAAA,EACvC;AACF;AAEO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,SAAiB,MAAA,EAAkB;AAC7C,IAAA,KAAA,CAAM,OAAA,EAAS,oBAAoB,MAAM,CAAA;AAAA,EAC3C;AACF;AAEO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CAAY,UAAkB,wBAAA,EAA0B;AACtD,IAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAAA,EAChC;AACF;AAEO,IAAM,cAAA,GAAN,cAA6B,YAAA,CAAa;AAAA,EAG/C,WAAA,CAAY,OAAA,GAAkB,mBAAA,EAAqB,UAAA,EAAqB;AACtE,IAAA,KAAA,CAAM,SAAS,kBAAkB,CAAA;AACjC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;AAEO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CAAY,OAAA,GAAkB,qBAAA,EAAuB,IAAA,GAAe,eAAA,EAAiB;AACnF,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,EACrB;AACF;AAEO,IAAM,QAAA,GAAN,cAAuB,YAAA,CAAa;AAAA,EAGzC,WAAA,CAAY,OAAA,EAAiB,UAAA,EAAoB,IAAA,GAAe,WAAA,EAAa;AAC3E,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF;AAKO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CAAY,OAAA,EAAiB,IAAA,GAAe,eAAA,EAAiB,OAAA,EAAmB;AAC9E,IAAA,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,EAC9B;AACF;AAEO,IAAM,oBAAA,GAAN,cAAmC,YAAA,CAAa;AAAA,EACrD,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA,CAAM,mBAAmB,SAAS,CAAA,UAAA,CAAA,EAAc,mBAAA,EAAqB,EAAE,WAAW,CAAA;AAAA,EACpF;AACF;AAEO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA,CAAM,WAAW,SAAS,CAAA,YAAA,CAAA,EAAgB,iBAAA,EAAmB,EAAE,WAAW,CAAA;AAAA,EAC5E;AACF;AAEO,IAAM,wBAAA,GAAN,cAAuC,YAAA,CAAa;AAAA,EACzD,WAAA,CAAY,UAAkB,QAAA,EAAkB;AAC9C,IAAA,KAAA;AAAA,MACE,CAAA,+BAAA,EAAkC,QAAQ,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAA;AAAA,MAChE,sBAAA;AAAA,MACA,EAAE,UAAU,QAAA;AAAS,KACvB;AAAA,EACF;AACF;AAKO,IAAM,YAAA,GAAN,cAA2B,YAAA,CAAa;AAAA,EAC7C,WAAA,CAAY,OAAA,EAAiB,IAAA,GAAe,eAAA,EAAiB,OAAA,EAAmB;AAC9E,IAAA,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,EAC9B;AACF;AAEO,IAAM,qBAAA,GAAN,cAAoC,YAAA,CAAa;AAAA,EACtD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,yCAAyC,mBAAmB,CAAA;AAAA,EACpE;AACF;ACzFO,IAAM,mBAAN,MAAuB;AAAA,EAI5B,YAAY,MAAA,EAAuB;AACjC,IAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,SAAA,CAAU,MAAM,CAAA;AACvD,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,MAAA,MAAM,IAAI,eAAA,CAAgB,uBAAA,EAAyB,UAAA,CAAW,MAAM,MAAM,CAAA;AAAA,IAC5E;AACA,IAAA,IAAA,CAAK,SAAS,UAAA,CAAW,IAAA;AAEzB,IAAA,IAAA,CAAK,MAAA,GAASC,uBAAM,MAAA,CAAO;AAAA,MACzB,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,MACrB,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,MACrB,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,QAC7C,cAAA,EAAgB,kBAAA;AAAA,QAChB,YAAA,EAAc,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CAAA,CAAA;AAAA,QAC9D,eAAA,EAAiB;AAAA;AACnB,KACD,CAAA;AAGD,IAAA,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,CAACC,OAAAA,KAAW;AAC/C,MAACA,OAAAA,CAAyD,WAAA,GACtDA,OAAAA,CAAyD,WAAA,IAAe,CAAA;AAC5E,MAAA,OAAOA,OAAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,CAAO,aAAa,QAAA,CAAS,GAAA;AAAA,MAChC,CAAA,QAAA,KAAY,QAAA;AAAA,MACZ,OAAO,KAAA,KAAmF;AACxF,QAAA,MAAMA,UAAS,KAAA,CAAM,MAAA;AACrB,QAAA,MAAM,UAAA,GAAaA,SAAQ,WAAA,IAAe,CAAA;AAC1C,QAAA,MAAM,UAAA,GAAa,CAAA;AACnB,QAAA,MAAM,oBAAoB,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AAClD,QAAA,MAAM,cAAA,GAAiB,CAAC,cAAA,EAAgB,WAAA,EAAa,aAAa,YAAY,CAAA;AAG9E,QAAA,IACEA,OAAAA,IACA,aAAa,UAAA,KAEV,KAAA,CAAM,YAAY,iBAAA,CAAkB,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAClE,MAAM,IAAA,IAAQ,cAAA,CAAe,SAAS,KAAA,CAAM,IAAI,KAChD,CAAC,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,OAAA,CAAA,EAE5B;AACA,UAAAA,OAAAA,CAAO,cAAc,UAAA,GAAa,CAAA;AAGlC,UAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,UAAU,CAAA;AAC1C,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAEvD,UAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQA,OAAM,CAAA;AAAA,QACnC;AAGA,QAAA,IAAI,MAAM,QAAA,EAAU;AAClB,UAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,MAAA;AAC9B,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA;AAC5B,UAAA,MAAM,OAAA,GAAU,IAAA,EAAM,KAAA,IAAS,KAAA,CAAM,OAAA;AAErC,UAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,EAAK;AACpC,YAAA,MAAM,IAAI,oBAAoB,OAAO,CAAA;AAAA,UACvC;AACA,UAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,EAAK;AACpC,YAAA,MAAM,IAAI,eAAA,CAAgB,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,UAClD;AACA,UAAA,IAAI,WAAW,GAAA,EAAK;AAClB,YAAA,MAAM,IAAI,QAAA,CAAS,OAAA,EAAS,GAAA,EAAK,WAAW,CAAA;AAAA,UAC9C;AACA,UAAA,IAAI,WAAW,GAAA,EAAK;AAClB,YAAA,MAAM,IAAI,eAAe,OAAO,CAAA;AAAA,UAClC;AACA,UAAA,IAAI,UAAU,GAAA,EAAK;AACjB,YAAA,MAAM,IAAI,QAAA,CAAS,OAAA,EAAS,MAAA,EAAQ,cAAc,CAAA;AAAA,UACpD;AACA,UAAA,MAAM,IAAI,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AAAA,QACpC,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,cAAA,EAAgB;AACxC,UAAA,MAAM,IAAI,aAAa,iBAAiB,CAAA;AAAA,QAC1C,CAAA,MAAA,IAAW,MAAM,OAAA,EAAS;AACxB,UAAA,MAAM,IAAI,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAAA,QACtC,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAAA,QACtC;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAAA,CACJ,MAAA,EACA,OAAA,EACkB;AAClB,IAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,SAAA,CAAU,MAAM,CAAA;AACvD,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,MAAA,MAAM,IAAI,eAAA,CAAgB,4BAAA,EAA8B,UAAA,CAAW,MAAM,MAAM,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,UAAkC,EAAC;AAEzC,IAAA,IAAI,SAAS,cAAA,EAAgB;AAC3B,MAAA,OAAA,CAAQ,iBAAiB,IAAI,OAAA,CAAQ,cAAA;AAAA,IACvC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAA8B,aAAa,UAAA,CAAW,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA;AAC1G,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,SAAA,EAAqC;AACpD,IAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,gBAAgB,wBAAwB,CAAA;AAClE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAO,GAAA,CAA6B,CAAA,UAAA,EAAa,SAAS,CAAA,CAAE,CAAA;AACxF,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,MAAA,EAAkE;AACnF,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAQhC,WAAA,EAAa;AAAA,MACd;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,GAAG,QAAA,CAAS,IAAA;AAAA,MACZ,IAAA,EAAM,SAAS,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAA,KAAK,IAAA,CAAK,gBAAA,CAAiB,CAAC,CAAC;AAAA,KAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,SAAA,EAAqC;AACvD,IAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,gBAAgB,wBAAwB,CAAA;AAClE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAO,IAAA,CAA8B,CAAA,UAAA,EAAa,SAAS,CAAA,OAAA,CAAS,CAAA;AAChG,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,GAAkC;AACtC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAkB,iBAAiB,CAAA;AACtE,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,KAAA,EAAyC;AACxD,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,gBAAgB,mBAAmB,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAqB,CAAA,QAAA,CAAA,EAAY;AAAA,MAClE,MAAA,EAAQ,EAAE,KAAA,EAAO,KAAA,CAAM,aAAY;AAAE,KACtC,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,OAAA,EAAiD;AACvE,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,MAAM,IAAI,gBAAgB,mBAAmB,CAAA;AACjE,IAAA,IAAI,CAAC,QAAQ,MAAA,IAAU,OAAA,CAAQ,UAAU,CAAA,EAAG,MAAM,IAAI,eAAA,CAAgB,yBAAyB,CAAA;AAC/F,IAAA,IAAI,CAAC,OAAA,CAAQ,kBAAA,EAAoB,MAAM,IAAI,gBAAgB,iCAAiC,CAAA;AAE5F,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAiB,cAAA,EAAgB;AAAA,MAClE,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAY;AAAA,MACjC,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,oBAAoB,OAAA,CAAQ;AAAA,KAC7B,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,GAAyC;AAC7C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAA4B,cAAc,CAAA;AAC7E,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,YAAA,EAA2C;AAC7D,IAAA,IAAI,CAAC,YAAA,EAAc,MAAM,IAAI,gBAAgB,2BAA2B,CAAA;AACxE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAO,GAAA,CAAgB,CAAA,aAAA,EAAgB,YAAY,CAAA,CAAE,CAAA;AACjF,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,SAAA,EACA,SAAA,GAAoB,GAAA,EACpB,iBAAyB,GAAA,EACP;AAClB,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AAEvB,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,GAAQ,SAAA,EAAW;AACrC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AAE/C,QAAA,IAAI,QAAQ,MAAA,KAAA,WAAA,kBAAoC;AAC9C,UAAA,OAAO,OAAA;AAAA,QACT;AAEA,QAAA,MAAM,aAAA,GAAiC;AAAA,UAAA,QAAA;AAAA,UAAA,SAAA;AAAA,UAAA,WAAA;AAAA,SAIvC;AAEA,QAAA,IAAI,aAAA,CAAc,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1C,UAAA,MAAM,IAAI,YAAA;AAAA,YACR,CAAA,2BAAA,EAA8B,QAAQ,MAAM,CAAA,CAAA;AAAA,YAC5C;AAAA,WACF;AAAA,QACF;AAEA,QAAA,MAAM,IAAA,CAAK,MAAM,cAAc,CAAA;AAAA,MACjC,SAAS,CAAA,EAAG;AACV,QAAA,IAAI,CAAA,YAAa,YAAA,IAAgB,CAAA,CAAE,IAAA,KAAS,uBAAA,EAAyB;AACnE,UAAA,MAAM,CAAA;AAAA,QACR;AACA,QAAA,IAAI,EAAE,CAAA,YAAa,YAAA,IAAgB,CAAA,YAAa,YAAA,CAAA,EAAe;AAC7D,UAAA,MAAM,CAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,wCAAwC,SAAS,CAAA,EAAA,CAAA;AAAA,MACjD;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAA,CAAuB,SAAiB,SAAA,EAA4B;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,aAAA,EAAe;AAC9B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,gMAAA;AAAA,QAGA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,iBAAA,GAAoBC,iBAAA,CAAW,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA,CACrE,MAAA,CAAO,OAAO,CAAA,CACd,MAAA,CAAO,KAAK,CAAA;AAEf,MAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,iBAAA,EAAmB,KAAK,CAAA;AAC3D,MAAA,MAAM,YAAA,GAAe,OAAO,IAAA,CAAK,SAAA,CAAU,QAAQ,SAAA,EAAW,EAAE,GAAG,KAAK,CAAA;AAExE,MAAA,OAAO,eAAe,MAAA,KAAW,YAAA,CAAa,MAAA,IACvCC,sBAAA,CAAgB,gBAAgB,YAAY,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAAA,CAAa,YAAoB,SAAA,EAAmC;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,sBAAA,CAAuB,UAAA,EAAY,SAAS,CAAA,EAAG;AACvD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,oIAAA;AAAA,QAEA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAUrC,MAAA,OAAO;AAAA,QACL,IAAI,OAAA,CAAQ,EAAA;AAAA,QACZ,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA;AAAA,QAC9C,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,WAAW,OAAA,CAAQ;AAAA,OACrB;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,gCAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIQ,iBAAiB,OAAA,EAA2C;AAClE,IAAA,MAAM,QAAA,GAAY,OAAA,CAAQ,QAAA,IAAwC,EAAC;AACnE,IAAA,MAAM,iBAAiB,QAAA,CAAS,eAAA;AAChC,IAAA,MAAM,iBAAiB,QAAA,CAAS,MAAA;AAEhC,IAAA,OAAO;AAAA,MACL,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAA,EAAQ,OAAO,OAAA,CAAQ,MAAA,KAAW,WAAW,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,GAAK,OAAA,CAAQ,MAAA;AAAA,MAC/E,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,WAAW,OAAA,CAAQ,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA;AAAA,MAC3D,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,GAAI,MAAA;AAAA,MAC9D,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,YAAY,OAAA,CAAQ,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,GAAI,MAAA;AAAA,MAC9D,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,cAAc,cAAA,EAAgB,MAAA,GAAS,MAAA,CAAO,cAAA,CAAe,MAAM,CAAA,GAAI,MAAA;AAAA,MACvE,gBAAgB,cAAA,EAAgB,QAAA;AAAA,MAChC,YAAY,cAAA,EAAgB,IAAA;AAAA,MAC5B,iBAAiB,cAAA,EAAgB,SAAA;AAAA,MACjC,gBAAgB,cAAA,GAAiB;AAAA,QAC/B,MAAA,EAAQ,MAAA,CAAO,cAAA,CAAe,MAAM,CAAA;AAAA,QACpC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,YAAY,cAAA,CAAe,UAAA;AAAA,QAC3B,gBAAgB,MAAA,CAAO,cAAA,CAAe,cAAA,IAAkB,OAAA,CAAQ,aAAa,CAAC;AAAA,OAChF,GAAI;AAAA,KACN;AAAA,EACF;AAAA,EAEQ,MAAM,EAAA,EAA2B;AACvC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACvD;AAAA,EAEQ,cAAc,MAAA,EAAgC;AACpD,IAAA,OAAO;AAAA,MAAA,WAAA;AAAA,MAAA,QAAA;AAAA,MAAA,SAAA;AAAA,MAAA,WAAA;AAAA,KAKP,CAAE,SAAS,MAAM,CAAA;AAAA,EACnB;AAAA,EAEA,QAAQ,OAAA,EAA2B;AACjC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAAA,EAC1C;AAAA,EAEA,OAAO,OAAA,EAA2B;AAChC,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAA,WAAA;AAAA,EACjB;AAAA,EAEA,gBAAgB,OAAA,EAA2B;AACzC,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAA,gBAAA;AAAA,EACjB;AAAA,EAEA,UAAU,OAAA,EAA2B;AACnC,IAAA,OAAO,OAAA,CAAQ,MAAA,KAAA,SAAA;AAAA,EACjB;AAAA,EAEA,mBAAmB,OAAA,EAA0B;AAC3C,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7C,MAAA,OAAO,CAAA;AAAA,IACT;AAGA,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,MAAA,MAAM,QAAA,GAAY,OAAA,CAAQ,cAAA,CAAe,MAAA,GAAS,QAAQ,SAAA,GAAa,GAAA;AACvE,MAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,QAAQ,MAAA,KAAA,WAAA,kBAAoC;AAC9C,MAAA,OAAO,GAAA;AAAA,IACT;AAIA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAa,QAAgB,QAAA,EAA0B;AAErD,IAAA,MAAM,QAAA,GAAmC;AAAA,MACvC,KAAA,EAAO,CAAA;AAAA,MACP,KAAA,EAAO,CAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,QAAA,CAAS,WAAA,EAAa,CAAA,IAAK,CAAA;AAC1D,IAAA,OAAO,CAAA,EAAG,OAAO,OAAA,CAAQ,aAAa,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,aAAa,CAAA,CAAA;AAAA,EACnE;AACF","file":"index.js","sourcesContent":["// sdk > src > types.ts\n\nimport { z } from 'zod';\n\n// Enums\nexport enum BlaziumChain {\n SOL = 'SOL',\n TON = 'TON',\n BTC = 'BTC',\n}\n\nexport enum BlaziumFiat {\n USD = 'USD',\n EUR = 'EUR',\n TRY = 'TRY',\n}\n\nexport enum PaymentStatus {\n CREATED = 'CREATED',\n PENDING = 'PENDING',\n PARTIALLY_PAID = 'PARTIALLY_PAID',\n CONFIRMED = 'CONFIRMED',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum BlaziumEnvironment {\n PRODUCTION = 'production',\n SANDBOX = 'sandbox',\n}\n\nexport enum WithdrawalStatus {\n PENDING = 'PENDING',\n PROCESSING = 'PROCESSING',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n CANCELLED = 'CANCELLED',\n}\n\n// Configuration\nexport const BlaziumConfigSchema = z.object({\n apiKey: z.string().min(1, \"API Key is required\"),\n baseUrl: z.string().url().optional().default(\"https://api.blaziumpay.com/api/v1\"),\n timeout: z.number().min(0).optional().default(15000),\n environment: z.nativeEnum(BlaziumEnvironment).optional().default(BlaziumEnvironment.PRODUCTION),\n webhookSecret: z.string().optional(),\n});\n\nexport type BlaziumConfig = z.input<typeof BlaziumConfigSchema>;\nexport type BlaziumConfigInternal = z.output<typeof BlaziumConfigSchema>;\n\nexport interface Payment {\n id: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n checkoutUrl: string;\n createdAt: string;\n expiresAt: string;\n \n description?: string;\n metadata?: Record<string, unknown>;\n updatedAt?: string;\n \n payCurrency?: BlaziumChain;\n payAmount?: number;\n payAddress?: string;\n txHash?: string;\n networkFee?: number;\n blockHeight?: string;\n confirmedAt?: string;\n addressIndex?: number;\n \n // Locked exchange rate\n quotedRate?: number;\n quoteExpiresAt?: string;\n \n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n // Developers must implement their own logic in webhook handlers.\n rewardAmount?: number;\n rewardCurrency?: string;\n rewardData?: Record<string, unknown>;\n rewardDelivered?: boolean; // Flag from API indicating if developer has marked reward as delivered\n \n partialPayment?: {\n amount: number;\n txHash: string;\n detectedAt: string;\n expectedAmount: number;\n };\n}\n\nexport const CreatePaymentSchema = z.object({\n amount: z.number().positive(\"Amount must be positive\"),\n currency: z.string().min(2).max(5).toUpperCase(),\n description: z.string().max(500).optional(),\n metadata: z.record(z.unknown()).optional(),\n redirectUrl: z.string().url().optional(),\n cancelUrl: z.string().url().optional(),\n expiresIn: z.number().min(60).max(86400).optional(),\n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n rewardAmount: z.number().optional(),\n rewardCurrency: z.string().optional(),\n rewardData: z.record(z.unknown()).optional(),\n});\n\nexport type CreatePaymentParams = z.infer<typeof CreatePaymentSchema>;\n\nexport interface CreatePaymentOptions {\n idempotencyKey?: string;\n}\n\nexport enum WebhookEventType {\n PAYMENT_CREATED = 'payment.created',\n PAYMENT_PENDING = 'payment.pending',\n PAYMENT_CONFIRMED = 'payment.confirmed',\n PAYMENT_FAILED = 'payment.failed',\n PAYMENT_EXPIRED = 'payment.expired',\n PAYMENT_PARTIALLY_PAID = 'payment.partially_paid',\n}\n\nexport interface WebhookPayload {\n id: string; // Webhook delivery ID\n webhook_id: string; // Unique webhook ID for idempotency checks\n event: WebhookEventType;\n payment_id: string; // Payment ID (convenience field)\n payment: Payment;\n timestamp: string;\n createdAt: string;\n // Note: signature is in HTTP header 'X-Blazium-Signature', not in payload\n}\n\nexport interface PaymentStats {\n total: number;\n confirmed: number;\n pending: number;\n failed: number;\n totalVolume: number;\n currency: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n}\n\nexport interface ListPaymentsParams {\n status?: PaymentStatus;\n currency?: string;\n page?: number;\n pageSize?: number;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface MerchantBalance {\n chain: string;\n totalEarned: string;\n availableBalance: string;\n pendingBalance: string;\n totalWithdrawn: string;\n holdAmount: string;\n settlementPeriodDays: number;\n}\n\nexport interface Withdrawal {\n id: string;\n status: WithdrawalStatus;\n amount: string;\n chain: string;\n destinationAddress: string;\n txHash?: string;\n networkFee?: string;\n finalAmount?: string;\n errorMessage?: string;\n requestedAt: string;\n completedAt?: string;\n}\n\nexport interface WithdrawalRequest {\n chain: string;\n amount: number;\n destinationAddress: string;\n}","// sdk > src > errors.ts\n\nexport class BlaziumError extends Error {\n public code: string;\n public details?: unknown;\n\n constructor(message: string, code: string = 'UNKNOWN_ERROR', details?: unknown) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n this.details = details;\n \n // Maintains proper stack trace for where error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Convert error to JSON format\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\n stack: this.stack\n };\n }\n}\n\nexport class AuthenticationError extends BlaziumError {\n constructor(message: string = 'Invalid API Key provided') {\n super(message, 'AUTHENTICATION_ERROR');\n }\n}\n\nexport class ValidationError extends BlaziumError {\n constructor(message: string, errors?: unknown) {\n super(message, 'VALIDATION_ERROR', errors);\n }\n}\n\nexport class NetworkError extends BlaziumError {\n constructor(message: string = 'Network request failed') {\n super(message, 'NETWORK_ERROR');\n }\n}\n\nexport class RateLimitError extends BlaziumError {\n public retryAfter?: number;\n\n constructor(message: string = 'Too many requests', retryAfter?: number) {\n super(message, 'RATE_LIMIT_ERROR');\n this.retryAfter = retryAfter;\n }\n}\n\nexport class TimeoutError extends BlaziumError {\n constructor(message: string = 'Operation timed out', code: string = 'TIMEOUT_ERROR') {\n super(message, code);\n }\n}\n\nexport class APIError extends BlaziumError {\n public statusCode: number;\n\n constructor(message: string, statusCode: number, code: string = 'API_ERROR') {\n super(message, code);\n this.statusCode = statusCode;\n }\n}\n\n/**\n * ✅ NEW: Payment specific errors\n */\nexport class PaymentError extends BlaziumError {\n constructor(message: string, code: string = 'PAYMENT_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class PaymentNotFoundError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment with ID ${paymentId} not found`, 'PAYMENT_NOT_FOUND', { paymentId });\n }\n}\n\nexport class PaymentExpiredError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment ${paymentId} has expired`, 'PAYMENT_EXPIRED', { paymentId });\n }\n}\n\nexport class InsufficientPaymentError extends PaymentError {\n constructor(received: number, expected: number) {\n super(\n `Insufficient payment: received ${received}, expected ${expected}`,\n 'INSUFFICIENT_PAYMENT',\n { received, expected }\n );\n }\n}\n\n/**\n * ✅ NEW: Webhook specific errors\n */\nexport class WebhookError extends BlaziumError {\n constructor(message: string, code: string = 'WEBHOOK_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class InvalidSignatureError extends WebhookError {\n constructor() {\n super('Webhook signature verification failed', 'INVALID_SIGNATURE');\n }\n}","// sdk > src > client.ts\nimport { \n BlaziumConfig, \n BlaziumConfigSchema,\n BlaziumChain,\n Payment, \n CreatePaymentParams,\n CreatePaymentOptions,\n CreatePaymentSchema,\n PaymentStatus,\n WebhookPayload,\n WebhookEventType,\n ListPaymentsParams,\n PaginatedResponse,\n PaymentStats,\n MerchantBalance,\n Withdrawal,\n WithdrawalRequest\n} from './types';\nimport { \n BlaziumError, \n NetworkError, \n ValidationError, \n AuthenticationError, \n TimeoutError, \n APIError,\n RateLimitError \n} from './errors';\nimport axios, { AxiosInstance, AxiosError, AxiosRequestConfig } from 'axios';\nimport { createHmac, timingSafeEqual } from 'crypto';\n\nexport class BlaziumPayClient {\n private client: AxiosInstance;\n private config: BlaziumConfig;\n\n constructor(config: BlaziumConfig) {\n const validation = BlaziumConfigSchema.safeParse(config);\n if (!validation.success) {\n throw new ValidationError('Invalid configuration', validation.error.errors);\n }\n this.config = validation.data;\n\n this.client = axios.create({\n baseURL: this.config.baseUrl,\n timeout: this.config.timeout,\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': `BlaziumPay-SDK/1.0.0 (${this.config.environment})`,\n 'X-SDK-Version': '1.0.0'\n }\n });\n\n // Add retry logic for transient failures\n this.client.interceptors.request.use((config) => {\n (config as AxiosRequestConfig & { _retryCount?: number })._retryCount = \n ((config as AxiosRequestConfig & { _retryCount?: number })._retryCount || 0);\n return config;\n });\n\n this.client.interceptors.response.use(\n response => response,\n async (error: AxiosError & { config?: AxiosRequestConfig & { _retryCount?: number } }) => {\n const config = error.config;\n const retryCount = config?._retryCount || 0;\n const maxRetries = 3;\n const retryableStatuses = [429, 500, 502, 503, 504];\n const retryableCodes = ['ECONNABORTED', 'ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET'];\n\n // Retry logic for transient failures\n if (\n config &&\n retryCount < maxRetries &&\n (\n (error.response && retryableStatuses.includes(error.response.status)) ||\n (error.code && retryableCodes.includes(error.code)) ||\n (!error.response && error.request)\n )\n ) {\n config._retryCount = retryCount + 1;\n \n // Exponential backoff: 0.3s, 0.6s, 1.2s\n const delay = 300 * Math.pow(2, retryCount);\n await new Promise(resolve => setTimeout(resolve, delay));\n \n return this.client.request(config);\n }\n\n // Handle errors after retries exhausted or non-retryable errors\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data as { error?: string; details?: unknown };\n const message = data?.error || error.message;\n\n if (status === 401 || status === 403) {\n throw new AuthenticationError(message);\n }\n if (status === 400 || status === 422) {\n throw new ValidationError(message, data?.details);\n }\n if (status === 404) {\n throw new APIError(message, 404, 'NOT_FOUND');\n }\n if (status === 429) {\n throw new RateLimitError(message);\n }\n if (status >= 500) {\n throw new APIError(message, status, 'SERVER_ERROR');\n }\n throw new APIError(message, status);\n } else if (error.code === 'ECONNABORTED') {\n throw new TimeoutError('Request timeout');\n } else if (error.request) {\n throw new NetworkError(error.message);\n } else {\n throw new BlaziumError(error.message);\n }\n }\n );\n }\n\n /**\n * Create a new payment with idempotency support.\n * \n * Note: rewardAmount and rewardCurrency are optional metadata fields for developer reference.\n * BlaziumPay does NOT automatically grant rewards - developers must implement their own\n * logic in webhook handlers to grant premium features, add currency, or perform other actions.\n */\n async createPayment(\n params: CreatePaymentParams,\n options?: CreatePaymentOptions\n ): Promise<Payment> {\n const validation = CreatePaymentSchema.safeParse(params);\n if (!validation.success) {\n throw new ValidationError('Invalid payment parameters', validation.error.errors);\n }\n\n const headers: Record<string, string> = {};\n \n if (options?.idempotencyKey) {\n headers['Idempotency-Key'] = options.idempotencyKey;\n }\n\n const response = await this.client.post<Record<string, unknown>>('/payments', validation.data, { headers });\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment details\n */\n async getPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.get<Record<string, unknown>>(`/payments/${paymentId}`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * List payments with filters\n */\n async listPayments(params?: ListPaymentsParams): Promise<PaginatedResponse<Payment>> {\n const response = await this.client.get<{\n data: Record<string, unknown>[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n }>('/payments', {\n params\n });\n return {\n ...response.data,\n data: response.data.data.map(p => this.normalizePayment(p))\n };\n }\n\n /**\n * Cancel a payment\n */\n async cancelPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.post<Record<string, unknown>>(`/payments/${paymentId}/cancel`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment statistics\n */\n async getStats(): Promise<PaymentStats> {\n const response = await this.client.get<PaymentStats>('/payments/stats');\n return response.data;\n }\n\n /**\n * Get merchant balance for a specific chain\n */\n async getBalance(chain: string): Promise<MerchantBalance> {\n if (!chain) throw new ValidationError(\"Chain is required\");\n const response = await this.client.get<MerchantBalance>(`/balance`, {\n params: { chain: chain.toUpperCase() }\n });\n return response.data;\n }\n\n /**\n * Request withdrawal\n */\n async requestWithdrawal(request: WithdrawalRequest): Promise<Withdrawal> {\n if (!request.chain) throw new ValidationError(\"Chain is required\");\n if (!request.amount || request.amount <= 0) throw new ValidationError(\"Amount must be positive\");\n if (!request.destinationAddress) throw new ValidationError(\"Destination address is required\");\n\n const response = await this.client.post<Withdrawal>('/withdrawals', {\n chain: request.chain.toUpperCase(),\n amount: request.amount,\n destinationAddress: request.destinationAddress\n });\n return response.data;\n }\n\n /**\n * List withdrawal history\n */\n async listWithdrawals(): Promise<Withdrawal[]> {\n const response = await this.client.get<{ data: Withdrawal[] }>('/withdrawals');\n return response.data.data;\n }\n\n /**\n * Get specific withdrawal status\n */\n async getWithdrawal(withdrawalId: string): Promise<Withdrawal> {\n if (!withdrawalId) throw new ValidationError(\"Withdrawal ID is required\");\n const response = await this.client.get<Withdrawal>(`/withdrawals/${withdrawalId}`);\n return response.data;\n }\n\n /**\n * Wait for a payment to be confirmed (Long Polling helper)\n */\n async waitForPayment(\n paymentId: string, \n timeoutMs: number = 300000,\n pollIntervalMs: number = 3000\n ): Promise<Payment> {\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n try {\n const payment = await this.getPayment(paymentId);\n \n if (payment.status === PaymentStatus.CONFIRMED) {\n return payment;\n }\n \n const finalStatuses: PaymentStatus[] = [\n PaymentStatus.FAILED,\n PaymentStatus.EXPIRED,\n PaymentStatus.CANCELLED\n ];\n \n if (finalStatuses.includes(payment.status)) {\n throw new BlaziumError(\n `Payment ended with status: ${payment.status}`,\n 'PAYMENT_NOT_CONFIRMED'\n );\n }\n \n await this.sleep(pollIntervalMs);\n } catch (e) {\n if (e instanceof BlaziumError && e.code === 'PAYMENT_NOT_CONFIRMED') {\n throw e;\n }\n if (!(e instanceof NetworkError || e instanceof TimeoutError)) {\n throw e;\n }\n }\n }\n \n throw new TimeoutError(\n `Payment confirmation timed out after ${timeoutMs}ms`,\n 'PAYMENT_TIMEOUT'\n );\n }\n\n /**\n * Verify webhook signature\n * \n * Note: Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay. You must verify your webhook endpoint in the\n * dashboard before it will receive events and require signature verification.\n */\n verifyWebhookSignature(payload: string, signature: string): boolean {\n if (!this.config.webhookSecret) {\n throw new ValidationError(\n 'Webhook secret not configured. Set webhookSecret in config. ' +\n 'Note: Webhooks must be verified in the dashboard before they receive events. ' +\n 'Only verified webhooks are sent events by BlaziumPay.',\n 'WEBHOOK_SECRET_MISSING'\n );\n }\n\n try {\n const expectedSignature = createHmac('sha256', this.config.webhookSecret)\n .update(payload)\n .digest('hex');\n\n const expectedBuffer = Buffer.from(expectedSignature, 'hex');\n const actualBuffer = Buffer.from(signature.replace('sha256=', ''), 'hex');\n\n return expectedBuffer.length === actualBuffer.length && \n timingSafeEqual(expectedBuffer, actualBuffer);\n } catch {\n return false;\n }\n }\n\n /**\n * Parse and verify webhook payload\n * \n * @param rawPayload - Raw JSON string of webhook payload\n * @param signature - Signature from HTTP header 'X-Blazium-Signature'\n * @returns Parsed and verified webhook payload\n * \n * Note: Signature is verified from HTTP header, not from payload.\n * Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay.\n */\n parseWebhook(rawPayload: string, signature: string): WebhookPayload {\n if (!this.verifyWebhookSignature(rawPayload, signature)) {\n throw new ValidationError(\n 'Invalid webhook signature. This webhook may be from an unverified endpoint. ' +\n 'Only verified webhooks receive events from BlaziumPay.',\n 'INVALID_SIGNATURE'\n );\n }\n\n try {\n const payload = JSON.parse(rawPayload) as {\n id: string;\n webhook_id: string;\n event: WebhookEventType;\n payment_id: string;\n payment: Record<string, unknown>;\n timestamp: string;\n createdAt: string;\n };\n \n return {\n id: payload.id,\n webhook_id: payload.webhook_id,\n event: payload.event,\n payment_id: payload.payment_id,\n payment: this.normalizePayment(payload.payment),\n timestamp: payload.timestamp,\n createdAt: payload.createdAt\n };\n } catch {\n throw new ValidationError(\n 'Invalid webhook payload format',\n 'INVALID_PAYLOAD'\n );\n }\n }\n\n // --- HELPERS ---\n\n private normalizePayment(payment: Record<string, unknown>): Payment {\n const metadata = (payment.metadata as Record<string, unknown>) || {};\n const partialPayment = metadata.partial_payment as Record<string, unknown> | undefined;\n const rewardMetaData = metadata.reward as Record<string, unknown> | undefined;\n \n return {\n id: payment.id as string,\n status: payment.status as PaymentStatus,\n amount: typeof payment.amount === 'string' ? Number(payment.amount) : (payment.amount as number),\n currency: payment.currency as string,\n checkoutUrl: payment.checkoutUrl as string,\n createdAt: payment.createdAt as string,\n expiresAt: payment.expiresAt as string,\n description: payment.description as string | undefined,\n metadata: payment.metadata as Record<string, unknown> | undefined,\n updatedAt: payment.updatedAt as string | undefined,\n payCurrency: payment.payCurrency as BlaziumChain | undefined,\n payAmount: payment.payAmount ? Number(payment.payAmount) : undefined,\n payAddress: payment.payAddress as string | undefined,\n txHash: payment.txHash as string | undefined,\n networkFee: payment.networkFee ? Number(payment.networkFee) : undefined,\n blockHeight: payment.blockHeight as string | undefined,\n confirmedAt: payment.confirmedAt as string | undefined,\n addressIndex: payment.addressIndex as number | undefined,\n quotedRate: payment.quotedRate ? Number(payment.quotedRate) : undefined,\n quoteExpiresAt: payment.quoteExpiresAt as string | undefined,\n rewardAmount: rewardMetaData?.amount ? Number(rewardMetaData.amount) : undefined,\n rewardCurrency: rewardMetaData?.currency as string | undefined,\n rewardData: rewardMetaData?.data as Record<string, unknown> | undefined,\n rewardDelivered: rewardMetaData?.delivered as boolean | undefined,\n partialPayment: partialPayment ? {\n amount: Number(partialPayment.amount),\n txHash: partialPayment.txHash as string,\n detectedAt: partialPayment.detectedAt as string,\n expectedAmount: Number(partialPayment.expectedAmount ?? payment.payAmount ?? 0)\n } : undefined\n };\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isFinalStatus(status: PaymentStatus): boolean {\n return [\n PaymentStatus.CONFIRMED, \n PaymentStatus.FAILED, \n PaymentStatus.EXPIRED, \n PaymentStatus.CANCELLED\n ].includes(status);\n }\n\n isFinal(payment: Payment): boolean {\n return this.isFinalStatus(payment.status);\n }\n\n isPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.CONFIRMED;\n }\n\n isPartiallyPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.PARTIALLY_PAID;\n }\n\n isExpired(payment: Payment): boolean {\n return payment.status === PaymentStatus.EXPIRED;\n }\n\n getPaymentProgress(payment: Payment): number {\n if (!payment.payAmount || payment.amount <= 0) {\n return 0;\n }\n \n // If there's a partial payment, use that amount\n if (payment.partialPayment) {\n const progress = (payment.partialPayment.amount / payment.payAmount) * 100;\n return Math.min(100, Math.max(0, progress));\n }\n \n // If payment is confirmed, it's 100%\n if (payment.status === PaymentStatus.CONFIRMED) {\n return 100;\n }\n \n // Otherwise calculate based on payAmount vs expected amount\n // Note: This is approximate as we don't have real-time payment tracking\n return 0;\n }\n\n formatAmount(amount: number, currency: string): string {\n // Format crypto amounts with appropriate decimals\n const decimals: Record<string, number> = {\n 'TON': 4,\n 'SOL': 4,\n 'BTC': 8,\n };\n \n const decimalPlaces = decimals[currency.toUpperCase()] || 4;\n return `${amount.toFixed(decimalPlaces)} ${currency.toUpperCase()}`;\n }\n}"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/client.ts"],"names":["BlaziumChain","BlaziumFiat","PaymentStatus","BlaziumEnvironment","WithdrawalStatus","z","WebhookEventType","axios","config","createHmac","timingSafeEqual"],"mappings":"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","file":"index.js","sourcesContent":["// sdk > src > types.ts\n\nimport { z } from 'zod';\n\n// Enums\nexport enum BlaziumChain {\n SOL = 'SOL',\n TON = 'TON',\n BTC = 'BTC',\n}\n\nexport enum BlaziumFiat {\n USD = 'USD',\n EUR = 'EUR',\n TRY = 'TRY',\n}\n\nexport enum PaymentStatus {\n PENDING = 'PENDING',\n PARTIALLY_PAID = 'PARTIALLY_PAID', // Tracked via payment metadata (not a DB status)\n CONFIRMED = 'CONFIRMED',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum BlaziumEnvironment {\n PRODUCTION = 'production',\n SANDBOX = 'sandbox',\n}\n\nexport enum WithdrawalStatus {\n PENDING = 'PENDING',\n PROCESSING = 'PROCESSING',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n CANCELLED = 'CANCELLED',\n}\n\n// Configuration\nexport const BlaziumConfigSchema = z.object({\n apiKey: z.string().min(1, \"API Key is required\"),\n baseUrl: z.string().url().optional().default(\"https://api.blaziumpay.com/api/v1\"),\n timeout: z.number().min(0).optional().default(15000),\n environment: z.nativeEnum(BlaziumEnvironment).optional().default(BlaziumEnvironment.PRODUCTION),\n webhookSecret: z.string().optional(),\n});\n\nexport type BlaziumConfig = z.input<typeof BlaziumConfigSchema>;\nexport type BlaziumConfigInternal = z.output<typeof BlaziumConfigSchema>;\n\nexport interface Payment {\n id: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n checkoutUrl: string;\n createdAt: string;\n expiresAt: string;\n \n description?: string;\n metadata?: Record<string, unknown>;\n updatedAt?: string;\n \n payCurrency?: BlaziumChain;\n payAmount?: number;\n payAddress?: string;\n txHash?: string;\n networkFee?: number;\n blockHeight?: string;\n confirmedAt?: string;\n addressIndex?: number;\n \n // Locked exchange rate\n quotedRate?: number;\n quoteExpiresAt?: string;\n \n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n // Developers must implement their own logic in webhook handlers.\n rewardAmount?: number;\n rewardCurrency?: string;\n rewardData?: Record<string, unknown>;\n rewardDelivered?: boolean; // Flag from API indicating if developer has marked reward as delivered\n \n partialPayment?: {\n amount: number;\n txHash: string;\n detectedAt: string;\n expectedAmount: number;\n };\n}\n\nexport const CreatePaymentSchema = z.object({\n amount: z.number().positive(\"Amount must be positive\"),\n currency: z.string().min(2).max(5).toUpperCase(),\n description: z.string().max(500).optional(),\n metadata: z.record(z.unknown()).optional(),\n redirectUrl: z.string().url().optional(),\n cancelUrl: z.string().url().optional(),\n expiresIn: z.number().min(60).max(86400).optional(),\n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n rewardAmount: z.number().optional(),\n rewardCurrency: z.string().optional(),\n rewardData: z.record(z.unknown()).optional(),\n});\n\nexport type CreatePaymentParams = z.infer<typeof CreatePaymentSchema>;\n\nexport interface CreatePaymentOptions {\n idempotencyKey?: string;\n}\n\nexport enum WebhookEventType {\n PAYMENT_CREATED = 'payment.created',\n PAYMENT_PENDING = 'payment.pending',\n PAYMENT_CONFIRMED = 'payment.confirmed',\n PAYMENT_FAILED = 'payment.failed',\n PAYMENT_EXPIRED = 'payment.expired',\n PAYMENT_PARTIALLY_PAID = 'payment.partially_paid',\n}\n\nexport interface WebhookPayload {\n id: string; // Webhook delivery ID\n webhook_id: string; // Unique webhook ID for idempotency checks\n event: WebhookEventType;\n payment_id: string; // Payment ID (convenience field)\n payment: Payment;\n timestamp: string;\n createdAt: string;\n // Note: signature is in HTTP header 'X-Blazium-Signature', not in payload\n}\n\nexport interface PaymentStats {\n total: number;\n confirmed: number;\n pending: number;\n failed: number;\n totalVolume: number;\n currency: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n}\n\nexport interface ListPaymentsParams {\n status?: PaymentStatus;\n currency?: string;\n page?: number;\n pageSize?: number;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface MerchantBalance {\n chain: string;\n totalEarned: string;\n availableBalance: string;\n pendingBalance: string;\n totalWithdrawn: string;\n holdAmount: string;\n settlementPeriodDays: number;\n}\n\nexport interface Withdrawal {\n id: string;\n status: WithdrawalStatus;\n amount: string;\n chain: string;\n destinationAddress: string;\n txHash?: string;\n networkFee?: string;\n finalAmount?: string;\n errorMessage?: string;\n requestedAt: string;\n completedAt?: string;\n}\n\nexport interface WithdrawalRequest {\n chain: string;\n amount: number;\n destinationAddress: string;\n}\n\n/**\n * Parameters for creating a payment via the drop-in button endpoint.\n * This uses the /api/v1/payments/button endpoint which accepts\n * the API key in the body instead of the Authorization header.\n */\nexport interface ButtonPaymentParams {\n amount: number;\n currency: string;\n description?: string;\n metadata?: Record<string, unknown>;\n redirectUrl?: string;\n cancelUrl?: string;\n expiresIn?: number;\n}\n\nexport interface ButtonPaymentResponse {\n id: string;\n checkoutUrl: string;\n status: string;\n}","// sdk > src > errors.ts\n\nexport class BlaziumError extends Error {\n public code: string;\n public details?: unknown;\n\n constructor(message: string, code: string = 'UNKNOWN_ERROR', details?: unknown) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n this.details = details;\n \n // Maintains proper stack trace for where error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Convert error to JSON format\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\n stack: this.stack\n };\n }\n}\n\nexport class AuthenticationError extends BlaziumError {\n constructor(message: string = 'Invalid API Key provided') {\n super(message, 'AUTHENTICATION_ERROR');\n }\n}\n\nexport class ValidationError extends BlaziumError {\n constructor(message: string, errors?: unknown) {\n super(message, 'VALIDATION_ERROR', errors);\n }\n}\n\nexport class NetworkError extends BlaziumError {\n constructor(message: string = 'Network request failed') {\n super(message, 'NETWORK_ERROR');\n }\n}\n\nexport class RateLimitError extends BlaziumError {\n public retryAfter?: number;\n\n constructor(message: string = 'Too many requests', retryAfter?: number) {\n super(message, 'RATE_LIMIT_ERROR');\n this.retryAfter = retryAfter;\n }\n}\n\nexport class TimeoutError extends BlaziumError {\n constructor(message: string = 'Operation timed out', code: string = 'TIMEOUT_ERROR') {\n super(message, code);\n }\n}\n\nexport class APIError extends BlaziumError {\n public statusCode: number;\n\n constructor(message: string, statusCode: number, code: string = 'API_ERROR') {\n super(message, code);\n this.statusCode = statusCode;\n }\n}\n\n/**\n * ✅ NEW: Payment specific errors\n */\nexport class PaymentError extends BlaziumError {\n constructor(message: string, code: string = 'PAYMENT_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class PaymentNotFoundError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment with ID ${paymentId} not found`, 'PAYMENT_NOT_FOUND', { paymentId });\n }\n}\n\nexport class PaymentExpiredError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment ${paymentId} has expired`, 'PAYMENT_EXPIRED', { paymentId });\n }\n}\n\nexport class InsufficientPaymentError extends PaymentError {\n constructor(received: number, expected: number) {\n super(\n `Insufficient payment: received ${received}, expected ${expected}`,\n 'INSUFFICIENT_PAYMENT',\n { received, expected }\n );\n }\n}\n\n/**\n * ✅ NEW: Webhook specific errors\n */\nexport class WebhookError extends BlaziumError {\n constructor(message: string, code: string = 'WEBHOOK_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class InvalidSignatureError extends WebhookError {\n constructor() {\n super('Webhook signature verification failed', 'INVALID_SIGNATURE');\n }\n}","// sdk > src > client.ts\nimport { \n BlaziumConfig, \n BlaziumConfigSchema,\n BlaziumChain,\n Payment, \n CreatePaymentParams,\n CreatePaymentOptions,\n CreatePaymentSchema,\n PaymentStatus,\n WebhookPayload,\n WebhookEventType,\n ListPaymentsParams,\n PaginatedResponse,\n PaymentStats,\n MerchantBalance,\n Withdrawal,\n WithdrawalRequest,\n ButtonPaymentParams,\n ButtonPaymentResponse\n} from './types';\nimport { \n BlaziumError, \n NetworkError, \n ValidationError, \n AuthenticationError, \n TimeoutError, \n APIError,\n RateLimitError \n} from './errors';\nimport axios, { AxiosInstance, AxiosError, AxiosRequestConfig } from 'axios';\nimport { createHmac, timingSafeEqual } from 'crypto';\n\nexport class BlaziumPayClient {\n private client: AxiosInstance;\n private config: BlaziumConfig;\n\n constructor(config: BlaziumConfig) {\n const validation = BlaziumConfigSchema.safeParse(config);\n if (!validation.success) {\n throw new ValidationError('Invalid configuration', validation.error.errors);\n }\n this.config = validation.data;\n\n this.client = axios.create({\n baseURL: this.config.baseUrl,\n timeout: this.config.timeout,\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': `BlaziumPay-SDK/1.0.0 (${this.config.environment})`,\n 'X-SDK-Version': '1.0.0'\n }\n });\n\n // Add retry logic for transient failures\n this.client.interceptors.request.use((config) => {\n (config as AxiosRequestConfig & { _retryCount?: number })._retryCount = \n ((config as AxiosRequestConfig & { _retryCount?: number })._retryCount || 0);\n return config;\n });\n\n this.client.interceptors.response.use(\n response => response,\n async (error: AxiosError & { config?: AxiosRequestConfig & { _retryCount?: number } }) => {\n const config = error.config;\n const retryCount = config?._retryCount || 0;\n const maxRetries = 3;\n const retryableStatuses = [429, 500, 502, 503, 504];\n const retryableCodes = ['ECONNABORTED', 'ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET'];\n\n // Retry logic for transient failures\n if (\n config &&\n retryCount < maxRetries &&\n (\n (error.response && retryableStatuses.includes(error.response.status)) ||\n (error.code && retryableCodes.includes(error.code)) ||\n (!error.response && error.request)\n )\n ) {\n config._retryCount = retryCount + 1;\n \n // Exponential backoff: 0.3s, 0.6s, 1.2s\n const delay = 300 * Math.pow(2, retryCount);\n await new Promise(resolve => setTimeout(resolve, delay));\n \n return this.client.request(config);\n }\n\n // Handle errors after retries exhausted or non-retryable errors\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data as { error?: string; details?: unknown };\n const message = data?.error || error.message;\n\n if (status === 401 || status === 403) {\n throw new AuthenticationError(message);\n }\n if (status === 400 || status === 422) {\n throw new ValidationError(message, data?.details);\n }\n if (status === 404) {\n throw new APIError(message, 404, 'NOT_FOUND');\n }\n if (status === 429) {\n throw new RateLimitError(message);\n }\n if (status >= 500) {\n throw new APIError(message, status, 'SERVER_ERROR');\n }\n throw new APIError(message, status);\n } else if (error.code === 'ECONNABORTED') {\n throw new TimeoutError('Request timeout');\n } else if (error.request) {\n throw new NetworkError(error.message);\n } else {\n throw new BlaziumError(error.message);\n }\n }\n );\n }\n\n /**\n * Create a new payment with idempotency support.\n * \n * Note: rewardAmount and rewardCurrency are optional metadata fields for developer reference.\n * BlaziumPay does NOT automatically grant rewards - developers must implement their own\n * logic in webhook handlers to grant premium features, add currency, or perform other actions.\n */\n async createPayment(\n params: CreatePaymentParams,\n options?: CreatePaymentOptions\n ): Promise<Payment> {\n const validation = CreatePaymentSchema.safeParse(params);\n if (!validation.success) {\n throw new ValidationError('Invalid payment parameters', validation.error.errors);\n }\n\n const headers: Record<string, string> = {};\n \n if (options?.idempotencyKey) {\n headers['Idempotency-Key'] = options.idempotencyKey;\n }\n\n const response = await this.client.post<Record<string, unknown>>('/payments', validation.data, { headers });\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment details\n */\n async getPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.get<Record<string, unknown>>(`/payments/${paymentId}`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * List payments with filters\n */\n async listPayments(params?: ListPaymentsParams): Promise<PaginatedResponse<Payment>> {\n const response = await this.client.get<{\n data: Record<string, unknown>[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n }>('/payments', {\n params\n });\n return {\n ...response.data,\n data: response.data.data.map(p => this.normalizePayment(p))\n };\n }\n\n /**\n * Cancel a payment\n */\n async cancelPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.post<Record<string, unknown>>(`/payments/${paymentId}/cancel`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment statistics\n */\n async getStats(): Promise<PaymentStats> {\n const response = await this.client.get<PaymentStats>('/payments/stats');\n return response.data;\n }\n\n /**\n * Get merchant balance for a specific chain\n */\n async getBalance(chain: string): Promise<MerchantBalance> {\n if (!chain) throw new ValidationError(\"Chain is required\");\n const response = await this.client.get<MerchantBalance>(`/balance`, {\n params: { chain: chain.toUpperCase() }\n });\n return response.data;\n }\n\n /**\n * Request withdrawal\n */\n async requestWithdrawal(request: WithdrawalRequest): Promise<Withdrawal> {\n if (!request.chain) throw new ValidationError(\"Chain is required\");\n if (!request.amount || request.amount <= 0) throw new ValidationError(\"Amount must be positive\");\n if (!request.destinationAddress) throw new ValidationError(\"Destination address is required\");\n\n const response = await this.client.post<Withdrawal>('/withdrawals', {\n chain: request.chain.toUpperCase(),\n amount: request.amount,\n destinationAddress: request.destinationAddress\n });\n return response.data;\n }\n\n /**\n * List withdrawal history\n */\n async listWithdrawals(): Promise<Withdrawal[]> {\n const response = await this.client.get<{ data: Withdrawal[] }>('/withdrawals');\n return response.data.data;\n }\n\n /**\n * Get specific withdrawal status\n */\n async getWithdrawal(withdrawalId: string): Promise<Withdrawal> {\n if (!withdrawalId) throw new ValidationError(\"Withdrawal ID is required\");\n const response = await this.client.get<Withdrawal>(`/withdrawals/${withdrawalId}`);\n return response.data;\n }\n\n /**\n * Wait for a payment to be confirmed (Long Polling helper)\n */\n async waitForPayment(\n paymentId: string, \n timeoutMs: number = 300000,\n pollIntervalMs: number = 3000\n ): Promise<Payment> {\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n try {\n const payment = await this.getPayment(paymentId);\n \n if (payment.status === PaymentStatus.CONFIRMED) {\n return payment;\n }\n \n const finalStatuses: PaymentStatus[] = [\n PaymentStatus.FAILED,\n PaymentStatus.EXPIRED,\n PaymentStatus.CANCELLED\n ];\n \n if (finalStatuses.includes(payment.status)) {\n throw new BlaziumError(\n `Payment ended with status: ${payment.status}`,\n 'PAYMENT_NOT_CONFIRMED'\n );\n }\n \n await this.sleep(pollIntervalMs);\n } catch (e) {\n if (e instanceof BlaziumError && e.code === 'PAYMENT_NOT_CONFIRMED') {\n throw e;\n }\n if (!(e instanceof NetworkError || e instanceof TimeoutError)) {\n throw e;\n }\n }\n }\n \n throw new TimeoutError(\n `Payment confirmation timed out after ${timeoutMs}ms`,\n 'PAYMENT_TIMEOUT'\n );\n }\n\n /**\n * Verify webhook signature\n * \n * Note: Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay. You must verify your webhook endpoint in the\n * dashboard before it will receive events and require signature verification.\n */\n verifyWebhookSignature(payload: string, signature: string): boolean {\n if (!this.config.webhookSecret) {\n throw new ValidationError(\n 'Webhook secret not configured. Set webhookSecret in config. ' +\n 'Note: Webhooks must be verified in the dashboard before they receive events. ' +\n 'Only verified webhooks are sent events by BlaziumPay.',\n 'WEBHOOK_SECRET_MISSING'\n );\n }\n\n try {\n const expectedSignature = createHmac('sha256', this.config.webhookSecret)\n .update(payload)\n .digest('hex');\n\n const expectedBuffer = Buffer.from(expectedSignature, 'hex');\n const actualBuffer = Buffer.from(signature.replace('sha256=', ''), 'hex');\n\n return expectedBuffer.length === actualBuffer.length && \n timingSafeEqual(expectedBuffer, actualBuffer);\n } catch {\n return false;\n }\n }\n\n /**\n * Parse and verify webhook payload\n * \n * @param rawPayload - Raw JSON string of webhook payload\n * @param signature - Signature from HTTP header 'X-Blazium-Signature'\n * @returns Parsed and verified webhook payload\n * \n * Note: Signature is verified from HTTP header, not from payload.\n * Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay.\n */\n parseWebhook(rawPayload: string, signature: string): WebhookPayload {\n if (!this.verifyWebhookSignature(rawPayload, signature)) {\n throw new ValidationError(\n 'Invalid webhook signature. This webhook may be from an unverified endpoint. ' +\n 'Only verified webhooks receive events from BlaziumPay.',\n 'INVALID_SIGNATURE'\n );\n }\n\n try {\n const payload = JSON.parse(rawPayload) as {\n id: string;\n webhook_id: string;\n event: WebhookEventType;\n payment_id: string;\n payment: Record<string, unknown>;\n timestamp: string;\n createdAt: string;\n };\n \n return {\n id: payload.id,\n webhook_id: payload.webhook_id,\n event: payload.event,\n payment_id: payload.payment_id,\n payment: this.normalizePayment(payload.payment),\n timestamp: payload.timestamp,\n createdAt: payload.createdAt\n };\n } catch {\n throw new ValidationError(\n 'Invalid webhook payload format',\n 'INVALID_PAYLOAD'\n );\n }\n }\n\n // --- HELPERS ---\n\n private normalizePayment(payment: Record<string, unknown>): Payment {\n const metadata = (payment.metadata as Record<string, unknown>) || {};\n const partialPayment = metadata.partial_payment as Record<string, unknown> | undefined;\n const rewardMetaData = metadata.reward as Record<string, unknown> | undefined;\n \n return {\n id: payment.id as string,\n status: payment.status as PaymentStatus,\n amount: typeof payment.amount === 'string' ? Number(payment.amount) : (payment.amount as number),\n currency: payment.currency as string,\n checkoutUrl: payment.checkoutUrl as string,\n createdAt: payment.createdAt as string,\n expiresAt: payment.expiresAt as string,\n description: payment.description as string | undefined,\n metadata: payment.metadata as Record<string, unknown> | undefined,\n updatedAt: payment.updatedAt as string | undefined,\n payCurrency: payment.payCurrency as BlaziumChain | undefined,\n payAmount: payment.payAmount ? Number(payment.payAmount) : undefined,\n payAddress: payment.payAddress as string | undefined,\n txHash: payment.txHash as string | undefined,\n networkFee: payment.networkFee ? Number(payment.networkFee) : undefined,\n blockHeight: payment.blockHeight as string | undefined,\n confirmedAt: payment.confirmedAt as string | undefined,\n addressIndex: payment.addressIndex as number | undefined,\n quotedRate: payment.quotedRate ? Number(payment.quotedRate) : undefined,\n quoteExpiresAt: payment.quoteExpiresAt as string | undefined,\n rewardAmount: rewardMetaData?.amount ? Number(rewardMetaData.amount) : undefined,\n rewardCurrency: rewardMetaData?.currency as string | undefined,\n rewardData: rewardMetaData?.data as Record<string, unknown> | undefined,\n rewardDelivered: rewardMetaData?.delivered as boolean | undefined,\n partialPayment: partialPayment ? {\n amount: Number(partialPayment.amount),\n txHash: partialPayment.txHash as string,\n detectedAt: partialPayment.detectedAt as string,\n expectedAmount: Number(partialPayment.expectedAmount ?? payment.payAmount ?? 0)\n } : undefined\n };\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n isFinal(payment: Payment): boolean {\n return [\n PaymentStatus.CONFIRMED, \n PaymentStatus.FAILED, \n PaymentStatus.EXPIRED, \n PaymentStatus.CANCELLED\n ].includes(payment.status);\n }\n\n isPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.CONFIRMED;\n }\n\n isPartiallyPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.PARTIALLY_PAID;\n }\n\n isExpired(payment: Payment): boolean {\n return payment.status === PaymentStatus.EXPIRED;\n }\n\n getPaymentProgress(payment: Payment): number {\n if (!payment.payAmount || payment.amount <= 0) {\n return 0;\n }\n \n // If there's a partial payment, use that amount\n if (payment.partialPayment) {\n const progress = (payment.partialPayment.amount / payment.payAmount) * 100;\n return Math.min(100, Math.max(0, progress));\n }\n \n // If payment is confirmed, it's 100%\n if (payment.status === PaymentStatus.CONFIRMED) {\n return 100;\n }\n \n // Otherwise calculate based on payAmount vs expected amount\n // Note: This is approximate as we don't have real-time payment tracking\n return 0;\n }\n\n formatAmount(amount: number, currency: string): string {\n // Format crypto amounts with appropriate decimals\n const decimals: Record<string, number> = {\n 'TON': 4,\n 'SOL': 4,\n 'BTC': 8,\n };\n \n const decimalPlaces = decimals[currency.toUpperCase()] || 4;\n return `${amount.toFixed(decimalPlaces)} ${currency.toUpperCase()}`;\n }\n\n /**\n * Create a payment via the drop-in button endpoint.\n * \n * This is designed for client-side usage where the API key is sent in the\n * request body (not the Authorization header). It returns a checkout URL\n * that you can redirect the user to.\n * \n * Use this when you want to replicate the behavior of the pay-button.js widget\n * programmatically.\n * \n * @example\n * ```ts\n * const result = await client.createButtonPayment({\n * amount: 10.00,\n * currency: 'USD',\n * description: 'Premium Plan',\n * redirectUrl: 'https://myapp.com/success',\n * });\n * // Redirect user to result.checkoutUrl\n * ```\n */\n async createButtonPayment(params: ButtonPaymentParams): Promise<ButtonPaymentResponse> {\n if (!params.amount || params.amount <= 0) {\n throw new ValidationError('Amount must be positive');\n }\n if (!params.currency) {\n throw new ValidationError('Currency is required');\n }\n\n const response = await this.client.post('/payments/button', {\n apiKey: this.config.apiKey,\n amount: params.amount,\n currency: params.currency.toUpperCase(),\n description: params.description,\n metadata: params.metadata,\n redirectUrl: params.redirectUrl,\n cancelUrl: params.cancelUrl,\n expiresIn: params.expiresIn,\n });\n\n return {\n id: response.data.id,\n checkoutUrl: response.data.checkoutUrl,\n status: response.data.status,\n };\n }\n}"]}
package/dist/index.mjs CHANGED
@@ -16,7 +16,6 @@ var BlaziumFiat = /* @__PURE__ */ ((BlaziumFiat2) => {
16
16
  return BlaziumFiat2;
17
17
  })(BlaziumFiat || {});
18
18
  var PaymentStatus = /* @__PURE__ */ ((PaymentStatus2) => {
19
- PaymentStatus2["CREATED"] = "CREATED";
20
19
  PaymentStatus2["PENDING"] = "PENDING";
21
20
  PaymentStatus2["PARTIALLY_PAID"] = "PARTIALLY_PAID";
22
21
  PaymentStatus2["CONFIRMED"] = "CONFIRMED";
@@ -455,16 +454,13 @@ var BlaziumPayClient = class {
455
454
  sleep(ms) {
456
455
  return new Promise((resolve) => setTimeout(resolve, ms));
457
456
  }
458
- isFinalStatus(status) {
457
+ isFinal(payment) {
459
458
  return [
460
459
  "CONFIRMED" /* CONFIRMED */,
461
460
  "FAILED" /* FAILED */,
462
461
  "EXPIRED" /* EXPIRED */,
463
462
  "CANCELLED" /* CANCELLED */
464
- ].includes(status);
465
- }
466
- isFinal(payment) {
467
- return this.isFinalStatus(payment.status);
463
+ ].includes(payment.status);
468
464
  }
469
465
  isPaid(payment) {
470
466
  return payment.status === "CONFIRMED" /* CONFIRMED */;
@@ -497,6 +493,50 @@ var BlaziumPayClient = class {
497
493
  const decimalPlaces = decimals[currency.toUpperCase()] || 4;
498
494
  return `${amount.toFixed(decimalPlaces)} ${currency.toUpperCase()}`;
499
495
  }
496
+ /**
497
+ * Create a payment via the drop-in button endpoint.
498
+ *
499
+ * This is designed for client-side usage where the API key is sent in the
500
+ * request body (not the Authorization header). It returns a checkout URL
501
+ * that you can redirect the user to.
502
+ *
503
+ * Use this when you want to replicate the behavior of the pay-button.js widget
504
+ * programmatically.
505
+ *
506
+ * @example
507
+ * ```ts
508
+ * const result = await client.createButtonPayment({
509
+ * amount: 10.00,
510
+ * currency: 'USD',
511
+ * description: 'Premium Plan',
512
+ * redirectUrl: 'https://myapp.com/success',
513
+ * });
514
+ * // Redirect user to result.checkoutUrl
515
+ * ```
516
+ */
517
+ async createButtonPayment(params) {
518
+ if (!params.amount || params.amount <= 0) {
519
+ throw new ValidationError("Amount must be positive");
520
+ }
521
+ if (!params.currency) {
522
+ throw new ValidationError("Currency is required");
523
+ }
524
+ const response = await this.client.post("/payments/button", {
525
+ apiKey: this.config.apiKey,
526
+ amount: params.amount,
527
+ currency: params.currency.toUpperCase(),
528
+ description: params.description,
529
+ metadata: params.metadata,
530
+ redirectUrl: params.redirectUrl,
531
+ cancelUrl: params.cancelUrl,
532
+ expiresIn: params.expiresIn
533
+ });
534
+ return {
535
+ id: response.data.id,
536
+ checkoutUrl: response.data.checkoutUrl,
537
+ status: response.data.status
538
+ };
539
+ }
500
540
  };
501
541
 
502
542
  export { APIError, AuthenticationError, BlaziumChain, BlaziumConfigSchema, BlaziumEnvironment, BlaziumError, BlaziumFiat, BlaziumPayClient, CreatePaymentSchema, InsufficientPaymentError, InvalidSignatureError, NetworkError, PaymentError, PaymentExpiredError, PaymentNotFoundError, PaymentStatus, RateLimitError, TimeoutError, ValidationError, WebhookError, WebhookEventType, WithdrawalStatus };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/client.ts"],"names":["BlaziumChain","BlaziumFiat","PaymentStatus","BlaziumEnvironment","WithdrawalStatus","WebhookEventType","config"],"mappings":"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","file":"index.mjs","sourcesContent":["// sdk > src > types.ts\n\nimport { z } from 'zod';\n\n// Enums\nexport enum BlaziumChain {\n SOL = 'SOL',\n TON = 'TON',\n BTC = 'BTC',\n}\n\nexport enum BlaziumFiat {\n USD = 'USD',\n EUR = 'EUR',\n TRY = 'TRY',\n}\n\nexport enum PaymentStatus {\n CREATED = 'CREATED',\n PENDING = 'PENDING',\n PARTIALLY_PAID = 'PARTIALLY_PAID',\n CONFIRMED = 'CONFIRMED',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum BlaziumEnvironment {\n PRODUCTION = 'production',\n SANDBOX = 'sandbox',\n}\n\nexport enum WithdrawalStatus {\n PENDING = 'PENDING',\n PROCESSING = 'PROCESSING',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n CANCELLED = 'CANCELLED',\n}\n\n// Configuration\nexport const BlaziumConfigSchema = z.object({\n apiKey: z.string().min(1, \"API Key is required\"),\n baseUrl: z.string().url().optional().default(\"https://api.blaziumpay.com/api/v1\"),\n timeout: z.number().min(0).optional().default(15000),\n environment: z.nativeEnum(BlaziumEnvironment).optional().default(BlaziumEnvironment.PRODUCTION),\n webhookSecret: z.string().optional(),\n});\n\nexport type BlaziumConfig = z.input<typeof BlaziumConfigSchema>;\nexport type BlaziumConfigInternal = z.output<typeof BlaziumConfigSchema>;\n\nexport interface Payment {\n id: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n checkoutUrl: string;\n createdAt: string;\n expiresAt: string;\n \n description?: string;\n metadata?: Record<string, unknown>;\n updatedAt?: string;\n \n payCurrency?: BlaziumChain;\n payAmount?: number;\n payAddress?: string;\n txHash?: string;\n networkFee?: number;\n blockHeight?: string;\n confirmedAt?: string;\n addressIndex?: number;\n \n // Locked exchange rate\n quotedRate?: number;\n quoteExpiresAt?: string;\n \n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n // Developers must implement their own logic in webhook handlers.\n rewardAmount?: number;\n rewardCurrency?: string;\n rewardData?: Record<string, unknown>;\n rewardDelivered?: boolean; // Flag from API indicating if developer has marked reward as delivered\n \n partialPayment?: {\n amount: number;\n txHash: string;\n detectedAt: string;\n expectedAmount: number;\n };\n}\n\nexport const CreatePaymentSchema = z.object({\n amount: z.number().positive(\"Amount must be positive\"),\n currency: z.string().min(2).max(5).toUpperCase(),\n description: z.string().max(500).optional(),\n metadata: z.record(z.unknown()).optional(),\n redirectUrl: z.string().url().optional(),\n cancelUrl: z.string().url().optional(),\n expiresIn: z.number().min(60).max(86400).optional(),\n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n rewardAmount: z.number().optional(),\n rewardCurrency: z.string().optional(),\n rewardData: z.record(z.unknown()).optional(),\n});\n\nexport type CreatePaymentParams = z.infer<typeof CreatePaymentSchema>;\n\nexport interface CreatePaymentOptions {\n idempotencyKey?: string;\n}\n\nexport enum WebhookEventType {\n PAYMENT_CREATED = 'payment.created',\n PAYMENT_PENDING = 'payment.pending',\n PAYMENT_CONFIRMED = 'payment.confirmed',\n PAYMENT_FAILED = 'payment.failed',\n PAYMENT_EXPIRED = 'payment.expired',\n PAYMENT_PARTIALLY_PAID = 'payment.partially_paid',\n}\n\nexport interface WebhookPayload {\n id: string; // Webhook delivery ID\n webhook_id: string; // Unique webhook ID for idempotency checks\n event: WebhookEventType;\n payment_id: string; // Payment ID (convenience field)\n payment: Payment;\n timestamp: string;\n createdAt: string;\n // Note: signature is in HTTP header 'X-Blazium-Signature', not in payload\n}\n\nexport interface PaymentStats {\n total: number;\n confirmed: number;\n pending: number;\n failed: number;\n totalVolume: number;\n currency: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n}\n\nexport interface ListPaymentsParams {\n status?: PaymentStatus;\n currency?: string;\n page?: number;\n pageSize?: number;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface MerchantBalance {\n chain: string;\n totalEarned: string;\n availableBalance: string;\n pendingBalance: string;\n totalWithdrawn: string;\n holdAmount: string;\n settlementPeriodDays: number;\n}\n\nexport interface Withdrawal {\n id: string;\n status: WithdrawalStatus;\n amount: string;\n chain: string;\n destinationAddress: string;\n txHash?: string;\n networkFee?: string;\n finalAmount?: string;\n errorMessage?: string;\n requestedAt: string;\n completedAt?: string;\n}\n\nexport interface WithdrawalRequest {\n chain: string;\n amount: number;\n destinationAddress: string;\n}","// sdk > src > errors.ts\n\nexport class BlaziumError extends Error {\n public code: string;\n public details?: unknown;\n\n constructor(message: string, code: string = 'UNKNOWN_ERROR', details?: unknown) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n this.details = details;\n \n // Maintains proper stack trace for where error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Convert error to JSON format\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\n stack: this.stack\n };\n }\n}\n\nexport class AuthenticationError extends BlaziumError {\n constructor(message: string = 'Invalid API Key provided') {\n super(message, 'AUTHENTICATION_ERROR');\n }\n}\n\nexport class ValidationError extends BlaziumError {\n constructor(message: string, errors?: unknown) {\n super(message, 'VALIDATION_ERROR', errors);\n }\n}\n\nexport class NetworkError extends BlaziumError {\n constructor(message: string = 'Network request failed') {\n super(message, 'NETWORK_ERROR');\n }\n}\n\nexport class RateLimitError extends BlaziumError {\n public retryAfter?: number;\n\n constructor(message: string = 'Too many requests', retryAfter?: number) {\n super(message, 'RATE_LIMIT_ERROR');\n this.retryAfter = retryAfter;\n }\n}\n\nexport class TimeoutError extends BlaziumError {\n constructor(message: string = 'Operation timed out', code: string = 'TIMEOUT_ERROR') {\n super(message, code);\n }\n}\n\nexport class APIError extends BlaziumError {\n public statusCode: number;\n\n constructor(message: string, statusCode: number, code: string = 'API_ERROR') {\n super(message, code);\n this.statusCode = statusCode;\n }\n}\n\n/**\n * ✅ NEW: Payment specific errors\n */\nexport class PaymentError extends BlaziumError {\n constructor(message: string, code: string = 'PAYMENT_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class PaymentNotFoundError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment with ID ${paymentId} not found`, 'PAYMENT_NOT_FOUND', { paymentId });\n }\n}\n\nexport class PaymentExpiredError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment ${paymentId} has expired`, 'PAYMENT_EXPIRED', { paymentId });\n }\n}\n\nexport class InsufficientPaymentError extends PaymentError {\n constructor(received: number, expected: number) {\n super(\n `Insufficient payment: received ${received}, expected ${expected}`,\n 'INSUFFICIENT_PAYMENT',\n { received, expected }\n );\n }\n}\n\n/**\n * ✅ NEW: Webhook specific errors\n */\nexport class WebhookError extends BlaziumError {\n constructor(message: string, code: string = 'WEBHOOK_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class InvalidSignatureError extends WebhookError {\n constructor() {\n super('Webhook signature verification failed', 'INVALID_SIGNATURE');\n }\n}","// sdk > src > client.ts\nimport { \n BlaziumConfig, \n BlaziumConfigSchema,\n BlaziumChain,\n Payment, \n CreatePaymentParams,\n CreatePaymentOptions,\n CreatePaymentSchema,\n PaymentStatus,\n WebhookPayload,\n WebhookEventType,\n ListPaymentsParams,\n PaginatedResponse,\n PaymentStats,\n MerchantBalance,\n Withdrawal,\n WithdrawalRequest\n} from './types';\nimport { \n BlaziumError, \n NetworkError, \n ValidationError, \n AuthenticationError, \n TimeoutError, \n APIError,\n RateLimitError \n} from './errors';\nimport axios, { AxiosInstance, AxiosError, AxiosRequestConfig } from 'axios';\nimport { createHmac, timingSafeEqual } from 'crypto';\n\nexport class BlaziumPayClient {\n private client: AxiosInstance;\n private config: BlaziumConfig;\n\n constructor(config: BlaziumConfig) {\n const validation = BlaziumConfigSchema.safeParse(config);\n if (!validation.success) {\n throw new ValidationError('Invalid configuration', validation.error.errors);\n }\n this.config = validation.data;\n\n this.client = axios.create({\n baseURL: this.config.baseUrl,\n timeout: this.config.timeout,\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': `BlaziumPay-SDK/1.0.0 (${this.config.environment})`,\n 'X-SDK-Version': '1.0.0'\n }\n });\n\n // Add retry logic for transient failures\n this.client.interceptors.request.use((config) => {\n (config as AxiosRequestConfig & { _retryCount?: number })._retryCount = \n ((config as AxiosRequestConfig & { _retryCount?: number })._retryCount || 0);\n return config;\n });\n\n this.client.interceptors.response.use(\n response => response,\n async (error: AxiosError & { config?: AxiosRequestConfig & { _retryCount?: number } }) => {\n const config = error.config;\n const retryCount = config?._retryCount || 0;\n const maxRetries = 3;\n const retryableStatuses = [429, 500, 502, 503, 504];\n const retryableCodes = ['ECONNABORTED', 'ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET'];\n\n // Retry logic for transient failures\n if (\n config &&\n retryCount < maxRetries &&\n (\n (error.response && retryableStatuses.includes(error.response.status)) ||\n (error.code && retryableCodes.includes(error.code)) ||\n (!error.response && error.request)\n )\n ) {\n config._retryCount = retryCount + 1;\n \n // Exponential backoff: 0.3s, 0.6s, 1.2s\n const delay = 300 * Math.pow(2, retryCount);\n await new Promise(resolve => setTimeout(resolve, delay));\n \n return this.client.request(config);\n }\n\n // Handle errors after retries exhausted or non-retryable errors\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data as { error?: string; details?: unknown };\n const message = data?.error || error.message;\n\n if (status === 401 || status === 403) {\n throw new AuthenticationError(message);\n }\n if (status === 400 || status === 422) {\n throw new ValidationError(message, data?.details);\n }\n if (status === 404) {\n throw new APIError(message, 404, 'NOT_FOUND');\n }\n if (status === 429) {\n throw new RateLimitError(message);\n }\n if (status >= 500) {\n throw new APIError(message, status, 'SERVER_ERROR');\n }\n throw new APIError(message, status);\n } else if (error.code === 'ECONNABORTED') {\n throw new TimeoutError('Request timeout');\n } else if (error.request) {\n throw new NetworkError(error.message);\n } else {\n throw new BlaziumError(error.message);\n }\n }\n );\n }\n\n /**\n * Create a new payment with idempotency support.\n * \n * Note: rewardAmount and rewardCurrency are optional metadata fields for developer reference.\n * BlaziumPay does NOT automatically grant rewards - developers must implement their own\n * logic in webhook handlers to grant premium features, add currency, or perform other actions.\n */\n async createPayment(\n params: CreatePaymentParams,\n options?: CreatePaymentOptions\n ): Promise<Payment> {\n const validation = CreatePaymentSchema.safeParse(params);\n if (!validation.success) {\n throw new ValidationError('Invalid payment parameters', validation.error.errors);\n }\n\n const headers: Record<string, string> = {};\n \n if (options?.idempotencyKey) {\n headers['Idempotency-Key'] = options.idempotencyKey;\n }\n\n const response = await this.client.post<Record<string, unknown>>('/payments', validation.data, { headers });\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment details\n */\n async getPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.get<Record<string, unknown>>(`/payments/${paymentId}`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * List payments with filters\n */\n async listPayments(params?: ListPaymentsParams): Promise<PaginatedResponse<Payment>> {\n const response = await this.client.get<{\n data: Record<string, unknown>[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n }>('/payments', {\n params\n });\n return {\n ...response.data,\n data: response.data.data.map(p => this.normalizePayment(p))\n };\n }\n\n /**\n * Cancel a payment\n */\n async cancelPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.post<Record<string, unknown>>(`/payments/${paymentId}/cancel`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment statistics\n */\n async getStats(): Promise<PaymentStats> {\n const response = await this.client.get<PaymentStats>('/payments/stats');\n return response.data;\n }\n\n /**\n * Get merchant balance for a specific chain\n */\n async getBalance(chain: string): Promise<MerchantBalance> {\n if (!chain) throw new ValidationError(\"Chain is required\");\n const response = await this.client.get<MerchantBalance>(`/balance`, {\n params: { chain: chain.toUpperCase() }\n });\n return response.data;\n }\n\n /**\n * Request withdrawal\n */\n async requestWithdrawal(request: WithdrawalRequest): Promise<Withdrawal> {\n if (!request.chain) throw new ValidationError(\"Chain is required\");\n if (!request.amount || request.amount <= 0) throw new ValidationError(\"Amount must be positive\");\n if (!request.destinationAddress) throw new ValidationError(\"Destination address is required\");\n\n const response = await this.client.post<Withdrawal>('/withdrawals', {\n chain: request.chain.toUpperCase(),\n amount: request.amount,\n destinationAddress: request.destinationAddress\n });\n return response.data;\n }\n\n /**\n * List withdrawal history\n */\n async listWithdrawals(): Promise<Withdrawal[]> {\n const response = await this.client.get<{ data: Withdrawal[] }>('/withdrawals');\n return response.data.data;\n }\n\n /**\n * Get specific withdrawal status\n */\n async getWithdrawal(withdrawalId: string): Promise<Withdrawal> {\n if (!withdrawalId) throw new ValidationError(\"Withdrawal ID is required\");\n const response = await this.client.get<Withdrawal>(`/withdrawals/${withdrawalId}`);\n return response.data;\n }\n\n /**\n * Wait for a payment to be confirmed (Long Polling helper)\n */\n async waitForPayment(\n paymentId: string, \n timeoutMs: number = 300000,\n pollIntervalMs: number = 3000\n ): Promise<Payment> {\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n try {\n const payment = await this.getPayment(paymentId);\n \n if (payment.status === PaymentStatus.CONFIRMED) {\n return payment;\n }\n \n const finalStatuses: PaymentStatus[] = [\n PaymentStatus.FAILED,\n PaymentStatus.EXPIRED,\n PaymentStatus.CANCELLED\n ];\n \n if (finalStatuses.includes(payment.status)) {\n throw new BlaziumError(\n `Payment ended with status: ${payment.status}`,\n 'PAYMENT_NOT_CONFIRMED'\n );\n }\n \n await this.sleep(pollIntervalMs);\n } catch (e) {\n if (e instanceof BlaziumError && e.code === 'PAYMENT_NOT_CONFIRMED') {\n throw e;\n }\n if (!(e instanceof NetworkError || e instanceof TimeoutError)) {\n throw e;\n }\n }\n }\n \n throw new TimeoutError(\n `Payment confirmation timed out after ${timeoutMs}ms`,\n 'PAYMENT_TIMEOUT'\n );\n }\n\n /**\n * Verify webhook signature\n * \n * Note: Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay. You must verify your webhook endpoint in the\n * dashboard before it will receive events and require signature verification.\n */\n verifyWebhookSignature(payload: string, signature: string): boolean {\n if (!this.config.webhookSecret) {\n throw new ValidationError(\n 'Webhook secret not configured. Set webhookSecret in config. ' +\n 'Note: Webhooks must be verified in the dashboard before they receive events. ' +\n 'Only verified webhooks are sent events by BlaziumPay.',\n 'WEBHOOK_SECRET_MISSING'\n );\n }\n\n try {\n const expectedSignature = createHmac('sha256', this.config.webhookSecret)\n .update(payload)\n .digest('hex');\n\n const expectedBuffer = Buffer.from(expectedSignature, 'hex');\n const actualBuffer = Buffer.from(signature.replace('sha256=', ''), 'hex');\n\n return expectedBuffer.length === actualBuffer.length && \n timingSafeEqual(expectedBuffer, actualBuffer);\n } catch {\n return false;\n }\n }\n\n /**\n * Parse and verify webhook payload\n * \n * @param rawPayload - Raw JSON string of webhook payload\n * @param signature - Signature from HTTP header 'X-Blazium-Signature'\n * @returns Parsed and verified webhook payload\n * \n * Note: Signature is verified from HTTP header, not from payload.\n * Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay.\n */\n parseWebhook(rawPayload: string, signature: string): WebhookPayload {\n if (!this.verifyWebhookSignature(rawPayload, signature)) {\n throw new ValidationError(\n 'Invalid webhook signature. This webhook may be from an unverified endpoint. ' +\n 'Only verified webhooks receive events from BlaziumPay.',\n 'INVALID_SIGNATURE'\n );\n }\n\n try {\n const payload = JSON.parse(rawPayload) as {\n id: string;\n webhook_id: string;\n event: WebhookEventType;\n payment_id: string;\n payment: Record<string, unknown>;\n timestamp: string;\n createdAt: string;\n };\n \n return {\n id: payload.id,\n webhook_id: payload.webhook_id,\n event: payload.event,\n payment_id: payload.payment_id,\n payment: this.normalizePayment(payload.payment),\n timestamp: payload.timestamp,\n createdAt: payload.createdAt\n };\n } catch {\n throw new ValidationError(\n 'Invalid webhook payload format',\n 'INVALID_PAYLOAD'\n );\n }\n }\n\n // --- HELPERS ---\n\n private normalizePayment(payment: Record<string, unknown>): Payment {\n const metadata = (payment.metadata as Record<string, unknown>) || {};\n const partialPayment = metadata.partial_payment as Record<string, unknown> | undefined;\n const rewardMetaData = metadata.reward as Record<string, unknown> | undefined;\n \n return {\n id: payment.id as string,\n status: payment.status as PaymentStatus,\n amount: typeof payment.amount === 'string' ? Number(payment.amount) : (payment.amount as number),\n currency: payment.currency as string,\n checkoutUrl: payment.checkoutUrl as string,\n createdAt: payment.createdAt as string,\n expiresAt: payment.expiresAt as string,\n description: payment.description as string | undefined,\n metadata: payment.metadata as Record<string, unknown> | undefined,\n updatedAt: payment.updatedAt as string | undefined,\n payCurrency: payment.payCurrency as BlaziumChain | undefined,\n payAmount: payment.payAmount ? Number(payment.payAmount) : undefined,\n payAddress: payment.payAddress as string | undefined,\n txHash: payment.txHash as string | undefined,\n networkFee: payment.networkFee ? Number(payment.networkFee) : undefined,\n blockHeight: payment.blockHeight as string | undefined,\n confirmedAt: payment.confirmedAt as string | undefined,\n addressIndex: payment.addressIndex as number | undefined,\n quotedRate: payment.quotedRate ? Number(payment.quotedRate) : undefined,\n quoteExpiresAt: payment.quoteExpiresAt as string | undefined,\n rewardAmount: rewardMetaData?.amount ? Number(rewardMetaData.amount) : undefined,\n rewardCurrency: rewardMetaData?.currency as string | undefined,\n rewardData: rewardMetaData?.data as Record<string, unknown> | undefined,\n rewardDelivered: rewardMetaData?.delivered as boolean | undefined,\n partialPayment: partialPayment ? {\n amount: Number(partialPayment.amount),\n txHash: partialPayment.txHash as string,\n detectedAt: partialPayment.detectedAt as string,\n expectedAmount: Number(partialPayment.expectedAmount ?? payment.payAmount ?? 0)\n } : undefined\n };\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isFinalStatus(status: PaymentStatus): boolean {\n return [\n PaymentStatus.CONFIRMED, \n PaymentStatus.FAILED, \n PaymentStatus.EXPIRED, \n PaymentStatus.CANCELLED\n ].includes(status);\n }\n\n isFinal(payment: Payment): boolean {\n return this.isFinalStatus(payment.status);\n }\n\n isPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.CONFIRMED;\n }\n\n isPartiallyPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.PARTIALLY_PAID;\n }\n\n isExpired(payment: Payment): boolean {\n return payment.status === PaymentStatus.EXPIRED;\n }\n\n getPaymentProgress(payment: Payment): number {\n if (!payment.payAmount || payment.amount <= 0) {\n return 0;\n }\n \n // If there's a partial payment, use that amount\n if (payment.partialPayment) {\n const progress = (payment.partialPayment.amount / payment.payAmount) * 100;\n return Math.min(100, Math.max(0, progress));\n }\n \n // If payment is confirmed, it's 100%\n if (payment.status === PaymentStatus.CONFIRMED) {\n return 100;\n }\n \n // Otherwise calculate based on payAmount vs expected amount\n // Note: This is approximate as we don't have real-time payment tracking\n return 0;\n }\n\n formatAmount(amount: number, currency: string): string {\n // Format crypto amounts with appropriate decimals\n const decimals: Record<string, number> = {\n 'TON': 4,\n 'SOL': 4,\n 'BTC': 8,\n };\n \n const decimalPlaces = decimals[currency.toUpperCase()] || 4;\n return `${amount.toFixed(decimalPlaces)} ${currency.toUpperCase()}`;\n }\n}"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/client.ts"],"names":["BlaziumChain","BlaziumFiat","PaymentStatus","BlaziumEnvironment","WithdrawalStatus","WebhookEventType","config"],"mappings":"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","file":"index.mjs","sourcesContent":["// sdk > src > types.ts\n\nimport { z } from 'zod';\n\n// Enums\nexport enum BlaziumChain {\n SOL = 'SOL',\n TON = 'TON',\n BTC = 'BTC',\n}\n\nexport enum BlaziumFiat {\n USD = 'USD',\n EUR = 'EUR',\n TRY = 'TRY',\n}\n\nexport enum PaymentStatus {\n PENDING = 'PENDING',\n PARTIALLY_PAID = 'PARTIALLY_PAID', // Tracked via payment metadata (not a DB status)\n CONFIRMED = 'CONFIRMED',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum BlaziumEnvironment {\n PRODUCTION = 'production',\n SANDBOX = 'sandbox',\n}\n\nexport enum WithdrawalStatus {\n PENDING = 'PENDING',\n PROCESSING = 'PROCESSING',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n CANCELLED = 'CANCELLED',\n}\n\n// Configuration\nexport const BlaziumConfigSchema = z.object({\n apiKey: z.string().min(1, \"API Key is required\"),\n baseUrl: z.string().url().optional().default(\"https://api.blaziumpay.com/api/v1\"),\n timeout: z.number().min(0).optional().default(15000),\n environment: z.nativeEnum(BlaziumEnvironment).optional().default(BlaziumEnvironment.PRODUCTION),\n webhookSecret: z.string().optional(),\n});\n\nexport type BlaziumConfig = z.input<typeof BlaziumConfigSchema>;\nexport type BlaziumConfigInternal = z.output<typeof BlaziumConfigSchema>;\n\nexport interface Payment {\n id: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n checkoutUrl: string;\n createdAt: string;\n expiresAt: string;\n \n description?: string;\n metadata?: Record<string, unknown>;\n updatedAt?: string;\n \n payCurrency?: BlaziumChain;\n payAmount?: number;\n payAddress?: string;\n txHash?: string;\n networkFee?: number;\n blockHeight?: string;\n confirmedAt?: string;\n addressIndex?: number;\n \n // Locked exchange rate\n quotedRate?: number;\n quoteExpiresAt?: string;\n \n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n // Developers must implement their own logic in webhook handlers.\n rewardAmount?: number;\n rewardCurrency?: string;\n rewardData?: Record<string, unknown>;\n rewardDelivered?: boolean; // Flag from API indicating if developer has marked reward as delivered\n \n partialPayment?: {\n amount: number;\n txHash: string;\n detectedAt: string;\n expectedAmount: number;\n };\n}\n\nexport const CreatePaymentSchema = z.object({\n amount: z.number().positive(\"Amount must be positive\"),\n currency: z.string().min(2).max(5).toUpperCase(),\n description: z.string().max(500).optional(),\n metadata: z.record(z.unknown()).optional(),\n redirectUrl: z.string().url().optional(),\n cancelUrl: z.string().url().optional(),\n expiresIn: z.number().min(60).max(86400).optional(),\n // Reward metadata (optional - for developer reference only)\n // Note: BlaziumPay does NOT automatically grant rewards.\n rewardAmount: z.number().optional(),\n rewardCurrency: z.string().optional(),\n rewardData: z.record(z.unknown()).optional(),\n});\n\nexport type CreatePaymentParams = z.infer<typeof CreatePaymentSchema>;\n\nexport interface CreatePaymentOptions {\n idempotencyKey?: string;\n}\n\nexport enum WebhookEventType {\n PAYMENT_CREATED = 'payment.created',\n PAYMENT_PENDING = 'payment.pending',\n PAYMENT_CONFIRMED = 'payment.confirmed',\n PAYMENT_FAILED = 'payment.failed',\n PAYMENT_EXPIRED = 'payment.expired',\n PAYMENT_PARTIALLY_PAID = 'payment.partially_paid',\n}\n\nexport interface WebhookPayload {\n id: string; // Webhook delivery ID\n webhook_id: string; // Unique webhook ID for idempotency checks\n event: WebhookEventType;\n payment_id: string; // Payment ID (convenience field)\n payment: Payment;\n timestamp: string;\n createdAt: string;\n // Note: signature is in HTTP header 'X-Blazium-Signature', not in payload\n}\n\nexport interface PaymentStats {\n total: number;\n confirmed: number;\n pending: number;\n failed: number;\n totalVolume: number;\n currency: string;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n}\n\nexport interface ListPaymentsParams {\n status?: PaymentStatus;\n currency?: string;\n page?: number;\n pageSize?: number;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface MerchantBalance {\n chain: string;\n totalEarned: string;\n availableBalance: string;\n pendingBalance: string;\n totalWithdrawn: string;\n holdAmount: string;\n settlementPeriodDays: number;\n}\n\nexport interface Withdrawal {\n id: string;\n status: WithdrawalStatus;\n amount: string;\n chain: string;\n destinationAddress: string;\n txHash?: string;\n networkFee?: string;\n finalAmount?: string;\n errorMessage?: string;\n requestedAt: string;\n completedAt?: string;\n}\n\nexport interface WithdrawalRequest {\n chain: string;\n amount: number;\n destinationAddress: string;\n}\n\n/**\n * Parameters for creating a payment via the drop-in button endpoint.\n * This uses the /api/v1/payments/button endpoint which accepts\n * the API key in the body instead of the Authorization header.\n */\nexport interface ButtonPaymentParams {\n amount: number;\n currency: string;\n description?: string;\n metadata?: Record<string, unknown>;\n redirectUrl?: string;\n cancelUrl?: string;\n expiresIn?: number;\n}\n\nexport interface ButtonPaymentResponse {\n id: string;\n checkoutUrl: string;\n status: string;\n}","// sdk > src > errors.ts\n\nexport class BlaziumError extends Error {\n public code: string;\n public details?: unknown;\n\n constructor(message: string, code: string = 'UNKNOWN_ERROR', details?: unknown) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n this.details = details;\n \n // Maintains proper stack trace for where error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Convert error to JSON format\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\n stack: this.stack\n };\n }\n}\n\nexport class AuthenticationError extends BlaziumError {\n constructor(message: string = 'Invalid API Key provided') {\n super(message, 'AUTHENTICATION_ERROR');\n }\n}\n\nexport class ValidationError extends BlaziumError {\n constructor(message: string, errors?: unknown) {\n super(message, 'VALIDATION_ERROR', errors);\n }\n}\n\nexport class NetworkError extends BlaziumError {\n constructor(message: string = 'Network request failed') {\n super(message, 'NETWORK_ERROR');\n }\n}\n\nexport class RateLimitError extends BlaziumError {\n public retryAfter?: number;\n\n constructor(message: string = 'Too many requests', retryAfter?: number) {\n super(message, 'RATE_LIMIT_ERROR');\n this.retryAfter = retryAfter;\n }\n}\n\nexport class TimeoutError extends BlaziumError {\n constructor(message: string = 'Operation timed out', code: string = 'TIMEOUT_ERROR') {\n super(message, code);\n }\n}\n\nexport class APIError extends BlaziumError {\n public statusCode: number;\n\n constructor(message: string, statusCode: number, code: string = 'API_ERROR') {\n super(message, code);\n this.statusCode = statusCode;\n }\n}\n\n/**\n * ✅ NEW: Payment specific errors\n */\nexport class PaymentError extends BlaziumError {\n constructor(message: string, code: string = 'PAYMENT_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class PaymentNotFoundError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment with ID ${paymentId} not found`, 'PAYMENT_NOT_FOUND', { paymentId });\n }\n}\n\nexport class PaymentExpiredError extends PaymentError {\n constructor(paymentId: string) {\n super(`Payment ${paymentId} has expired`, 'PAYMENT_EXPIRED', { paymentId });\n }\n}\n\nexport class InsufficientPaymentError extends PaymentError {\n constructor(received: number, expected: number) {\n super(\n `Insufficient payment: received ${received}, expected ${expected}`,\n 'INSUFFICIENT_PAYMENT',\n { received, expected }\n );\n }\n}\n\n/**\n * ✅ NEW: Webhook specific errors\n */\nexport class WebhookError extends BlaziumError {\n constructor(message: string, code: string = 'WEBHOOK_ERROR', details?: unknown) {\n super(message, code, details);\n }\n}\n\nexport class InvalidSignatureError extends WebhookError {\n constructor() {\n super('Webhook signature verification failed', 'INVALID_SIGNATURE');\n }\n}","// sdk > src > client.ts\nimport { \n BlaziumConfig, \n BlaziumConfigSchema,\n BlaziumChain,\n Payment, \n CreatePaymentParams,\n CreatePaymentOptions,\n CreatePaymentSchema,\n PaymentStatus,\n WebhookPayload,\n WebhookEventType,\n ListPaymentsParams,\n PaginatedResponse,\n PaymentStats,\n MerchantBalance,\n Withdrawal,\n WithdrawalRequest,\n ButtonPaymentParams,\n ButtonPaymentResponse\n} from './types';\nimport { \n BlaziumError, \n NetworkError, \n ValidationError, \n AuthenticationError, \n TimeoutError, \n APIError,\n RateLimitError \n} from './errors';\nimport axios, { AxiosInstance, AxiosError, AxiosRequestConfig } from 'axios';\nimport { createHmac, timingSafeEqual } from 'crypto';\n\nexport class BlaziumPayClient {\n private client: AxiosInstance;\n private config: BlaziumConfig;\n\n constructor(config: BlaziumConfig) {\n const validation = BlaziumConfigSchema.safeParse(config);\n if (!validation.success) {\n throw new ValidationError('Invalid configuration', validation.error.errors);\n }\n this.config = validation.data;\n\n this.client = axios.create({\n baseURL: this.config.baseUrl,\n timeout: this.config.timeout,\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': `BlaziumPay-SDK/1.0.0 (${this.config.environment})`,\n 'X-SDK-Version': '1.0.0'\n }\n });\n\n // Add retry logic for transient failures\n this.client.interceptors.request.use((config) => {\n (config as AxiosRequestConfig & { _retryCount?: number })._retryCount = \n ((config as AxiosRequestConfig & { _retryCount?: number })._retryCount || 0);\n return config;\n });\n\n this.client.interceptors.response.use(\n response => response,\n async (error: AxiosError & { config?: AxiosRequestConfig & { _retryCount?: number } }) => {\n const config = error.config;\n const retryCount = config?._retryCount || 0;\n const maxRetries = 3;\n const retryableStatuses = [429, 500, 502, 503, 504];\n const retryableCodes = ['ECONNABORTED', 'ETIMEDOUT', 'ENOTFOUND', 'ECONNRESET'];\n\n // Retry logic for transient failures\n if (\n config &&\n retryCount < maxRetries &&\n (\n (error.response && retryableStatuses.includes(error.response.status)) ||\n (error.code && retryableCodes.includes(error.code)) ||\n (!error.response && error.request)\n )\n ) {\n config._retryCount = retryCount + 1;\n \n // Exponential backoff: 0.3s, 0.6s, 1.2s\n const delay = 300 * Math.pow(2, retryCount);\n await new Promise(resolve => setTimeout(resolve, delay));\n \n return this.client.request(config);\n }\n\n // Handle errors after retries exhausted or non-retryable errors\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data as { error?: string; details?: unknown };\n const message = data?.error || error.message;\n\n if (status === 401 || status === 403) {\n throw new AuthenticationError(message);\n }\n if (status === 400 || status === 422) {\n throw new ValidationError(message, data?.details);\n }\n if (status === 404) {\n throw new APIError(message, 404, 'NOT_FOUND');\n }\n if (status === 429) {\n throw new RateLimitError(message);\n }\n if (status >= 500) {\n throw new APIError(message, status, 'SERVER_ERROR');\n }\n throw new APIError(message, status);\n } else if (error.code === 'ECONNABORTED') {\n throw new TimeoutError('Request timeout');\n } else if (error.request) {\n throw new NetworkError(error.message);\n } else {\n throw new BlaziumError(error.message);\n }\n }\n );\n }\n\n /**\n * Create a new payment with idempotency support.\n * \n * Note: rewardAmount and rewardCurrency are optional metadata fields for developer reference.\n * BlaziumPay does NOT automatically grant rewards - developers must implement their own\n * logic in webhook handlers to grant premium features, add currency, or perform other actions.\n */\n async createPayment(\n params: CreatePaymentParams,\n options?: CreatePaymentOptions\n ): Promise<Payment> {\n const validation = CreatePaymentSchema.safeParse(params);\n if (!validation.success) {\n throw new ValidationError('Invalid payment parameters', validation.error.errors);\n }\n\n const headers: Record<string, string> = {};\n \n if (options?.idempotencyKey) {\n headers['Idempotency-Key'] = options.idempotencyKey;\n }\n\n const response = await this.client.post<Record<string, unknown>>('/payments', validation.data, { headers });\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment details\n */\n async getPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.get<Record<string, unknown>>(`/payments/${paymentId}`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * List payments with filters\n */\n async listPayments(params?: ListPaymentsParams): Promise<PaginatedResponse<Payment>> {\n const response = await this.client.get<{\n data: Record<string, unknown>[];\n pagination: {\n page: number;\n pageSize: number;\n totalPages: number;\n totalItems: number;\n };\n }>('/payments', {\n params\n });\n return {\n ...response.data,\n data: response.data.data.map(p => this.normalizePayment(p))\n };\n }\n\n /**\n * Cancel a payment\n */\n async cancelPayment(paymentId: string): Promise<Payment> {\n if (!paymentId) throw new ValidationError(\"Payment ID is required\");\n const response = await this.client.post<Record<string, unknown>>(`/payments/${paymentId}/cancel`);\n return this.normalizePayment(response.data);\n }\n\n /**\n * Get payment statistics\n */\n async getStats(): Promise<PaymentStats> {\n const response = await this.client.get<PaymentStats>('/payments/stats');\n return response.data;\n }\n\n /**\n * Get merchant balance for a specific chain\n */\n async getBalance(chain: string): Promise<MerchantBalance> {\n if (!chain) throw new ValidationError(\"Chain is required\");\n const response = await this.client.get<MerchantBalance>(`/balance`, {\n params: { chain: chain.toUpperCase() }\n });\n return response.data;\n }\n\n /**\n * Request withdrawal\n */\n async requestWithdrawal(request: WithdrawalRequest): Promise<Withdrawal> {\n if (!request.chain) throw new ValidationError(\"Chain is required\");\n if (!request.amount || request.amount <= 0) throw new ValidationError(\"Amount must be positive\");\n if (!request.destinationAddress) throw new ValidationError(\"Destination address is required\");\n\n const response = await this.client.post<Withdrawal>('/withdrawals', {\n chain: request.chain.toUpperCase(),\n amount: request.amount,\n destinationAddress: request.destinationAddress\n });\n return response.data;\n }\n\n /**\n * List withdrawal history\n */\n async listWithdrawals(): Promise<Withdrawal[]> {\n const response = await this.client.get<{ data: Withdrawal[] }>('/withdrawals');\n return response.data.data;\n }\n\n /**\n * Get specific withdrawal status\n */\n async getWithdrawal(withdrawalId: string): Promise<Withdrawal> {\n if (!withdrawalId) throw new ValidationError(\"Withdrawal ID is required\");\n const response = await this.client.get<Withdrawal>(`/withdrawals/${withdrawalId}`);\n return response.data;\n }\n\n /**\n * Wait for a payment to be confirmed (Long Polling helper)\n */\n async waitForPayment(\n paymentId: string, \n timeoutMs: number = 300000,\n pollIntervalMs: number = 3000\n ): Promise<Payment> {\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n try {\n const payment = await this.getPayment(paymentId);\n \n if (payment.status === PaymentStatus.CONFIRMED) {\n return payment;\n }\n \n const finalStatuses: PaymentStatus[] = [\n PaymentStatus.FAILED,\n PaymentStatus.EXPIRED,\n PaymentStatus.CANCELLED\n ];\n \n if (finalStatuses.includes(payment.status)) {\n throw new BlaziumError(\n `Payment ended with status: ${payment.status}`,\n 'PAYMENT_NOT_CONFIRMED'\n );\n }\n \n await this.sleep(pollIntervalMs);\n } catch (e) {\n if (e instanceof BlaziumError && e.code === 'PAYMENT_NOT_CONFIRMED') {\n throw e;\n }\n if (!(e instanceof NetworkError || e instanceof TimeoutError)) {\n throw e;\n }\n }\n }\n \n throw new TimeoutError(\n `Payment confirmation timed out after ${timeoutMs}ms`,\n 'PAYMENT_TIMEOUT'\n );\n }\n\n /**\n * Verify webhook signature\n * \n * Note: Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay. You must verify your webhook endpoint in the\n * dashboard before it will receive events and require signature verification.\n */\n verifyWebhookSignature(payload: string, signature: string): boolean {\n if (!this.config.webhookSecret) {\n throw new ValidationError(\n 'Webhook secret not configured. Set webhookSecret in config. ' +\n 'Note: Webhooks must be verified in the dashboard before they receive events. ' +\n 'Only verified webhooks are sent events by BlaziumPay.',\n 'WEBHOOK_SECRET_MISSING'\n );\n }\n\n try {\n const expectedSignature = createHmac('sha256', this.config.webhookSecret)\n .update(payload)\n .digest('hex');\n\n const expectedBuffer = Buffer.from(expectedSignature, 'hex');\n const actualBuffer = Buffer.from(signature.replace('sha256=', ''), 'hex');\n\n return expectedBuffer.length === actualBuffer.length && \n timingSafeEqual(expectedBuffer, actualBuffer);\n } catch {\n return false;\n }\n }\n\n /**\n * Parse and verify webhook payload\n * \n * @param rawPayload - Raw JSON string of webhook payload\n * @param signature - Signature from HTTP header 'X-Blazium-Signature'\n * @returns Parsed and verified webhook payload\n * \n * Note: Signature is verified from HTTP header, not from payload.\n * Only verified webhooks receive events. Unverified webhooks will not receive\n * any webhook events from BlaziumPay.\n */\n parseWebhook(rawPayload: string, signature: string): WebhookPayload {\n if (!this.verifyWebhookSignature(rawPayload, signature)) {\n throw new ValidationError(\n 'Invalid webhook signature. This webhook may be from an unverified endpoint. ' +\n 'Only verified webhooks receive events from BlaziumPay.',\n 'INVALID_SIGNATURE'\n );\n }\n\n try {\n const payload = JSON.parse(rawPayload) as {\n id: string;\n webhook_id: string;\n event: WebhookEventType;\n payment_id: string;\n payment: Record<string, unknown>;\n timestamp: string;\n createdAt: string;\n };\n \n return {\n id: payload.id,\n webhook_id: payload.webhook_id,\n event: payload.event,\n payment_id: payload.payment_id,\n payment: this.normalizePayment(payload.payment),\n timestamp: payload.timestamp,\n createdAt: payload.createdAt\n };\n } catch {\n throw new ValidationError(\n 'Invalid webhook payload format',\n 'INVALID_PAYLOAD'\n );\n }\n }\n\n // --- HELPERS ---\n\n private normalizePayment(payment: Record<string, unknown>): Payment {\n const metadata = (payment.metadata as Record<string, unknown>) || {};\n const partialPayment = metadata.partial_payment as Record<string, unknown> | undefined;\n const rewardMetaData = metadata.reward as Record<string, unknown> | undefined;\n \n return {\n id: payment.id as string,\n status: payment.status as PaymentStatus,\n amount: typeof payment.amount === 'string' ? Number(payment.amount) : (payment.amount as number),\n currency: payment.currency as string,\n checkoutUrl: payment.checkoutUrl as string,\n createdAt: payment.createdAt as string,\n expiresAt: payment.expiresAt as string,\n description: payment.description as string | undefined,\n metadata: payment.metadata as Record<string, unknown> | undefined,\n updatedAt: payment.updatedAt as string | undefined,\n payCurrency: payment.payCurrency as BlaziumChain | undefined,\n payAmount: payment.payAmount ? Number(payment.payAmount) : undefined,\n payAddress: payment.payAddress as string | undefined,\n txHash: payment.txHash as string | undefined,\n networkFee: payment.networkFee ? Number(payment.networkFee) : undefined,\n blockHeight: payment.blockHeight as string | undefined,\n confirmedAt: payment.confirmedAt as string | undefined,\n addressIndex: payment.addressIndex as number | undefined,\n quotedRate: payment.quotedRate ? Number(payment.quotedRate) : undefined,\n quoteExpiresAt: payment.quoteExpiresAt as string | undefined,\n rewardAmount: rewardMetaData?.amount ? Number(rewardMetaData.amount) : undefined,\n rewardCurrency: rewardMetaData?.currency as string | undefined,\n rewardData: rewardMetaData?.data as Record<string, unknown> | undefined,\n rewardDelivered: rewardMetaData?.delivered as boolean | undefined,\n partialPayment: partialPayment ? {\n amount: Number(partialPayment.amount),\n txHash: partialPayment.txHash as string,\n detectedAt: partialPayment.detectedAt as string,\n expectedAmount: Number(partialPayment.expectedAmount ?? payment.payAmount ?? 0)\n } : undefined\n };\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n isFinal(payment: Payment): boolean {\n return [\n PaymentStatus.CONFIRMED, \n PaymentStatus.FAILED, \n PaymentStatus.EXPIRED, \n PaymentStatus.CANCELLED\n ].includes(payment.status);\n }\n\n isPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.CONFIRMED;\n }\n\n isPartiallyPaid(payment: Payment): boolean {\n return payment.status === PaymentStatus.PARTIALLY_PAID;\n }\n\n isExpired(payment: Payment): boolean {\n return payment.status === PaymentStatus.EXPIRED;\n }\n\n getPaymentProgress(payment: Payment): number {\n if (!payment.payAmount || payment.amount <= 0) {\n return 0;\n }\n \n // If there's a partial payment, use that amount\n if (payment.partialPayment) {\n const progress = (payment.partialPayment.amount / payment.payAmount) * 100;\n return Math.min(100, Math.max(0, progress));\n }\n \n // If payment is confirmed, it's 100%\n if (payment.status === PaymentStatus.CONFIRMED) {\n return 100;\n }\n \n // Otherwise calculate based on payAmount vs expected amount\n // Note: This is approximate as we don't have real-time payment tracking\n return 0;\n }\n\n formatAmount(amount: number, currency: string): string {\n // Format crypto amounts with appropriate decimals\n const decimals: Record<string, number> = {\n 'TON': 4,\n 'SOL': 4,\n 'BTC': 8,\n };\n \n const decimalPlaces = decimals[currency.toUpperCase()] || 4;\n return `${amount.toFixed(decimalPlaces)} ${currency.toUpperCase()}`;\n }\n\n /**\n * Create a payment via the drop-in button endpoint.\n * \n * This is designed for client-side usage where the API key is sent in the\n * request body (not the Authorization header). It returns a checkout URL\n * that you can redirect the user to.\n * \n * Use this when you want to replicate the behavior of the pay-button.js widget\n * programmatically.\n * \n * @example\n * ```ts\n * const result = await client.createButtonPayment({\n * amount: 10.00,\n * currency: 'USD',\n * description: 'Premium Plan',\n * redirectUrl: 'https://myapp.com/success',\n * });\n * // Redirect user to result.checkoutUrl\n * ```\n */\n async createButtonPayment(params: ButtonPaymentParams): Promise<ButtonPaymentResponse> {\n if (!params.amount || params.amount <= 0) {\n throw new ValidationError('Amount must be positive');\n }\n if (!params.currency) {\n throw new ValidationError('Currency is required');\n }\n\n const response = await this.client.post('/payments/button', {\n apiKey: this.config.apiKey,\n amount: params.amount,\n currency: params.currency.toUpperCase(),\n description: params.description,\n metadata: params.metadata,\n redirectUrl: params.redirectUrl,\n cancelUrl: params.cancelUrl,\n expiresIn: params.expiresIn,\n });\n\n return {\n id: response.data.id,\n checkoutUrl: response.data.checkoutUrl,\n status: response.data.status,\n };\n }\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blazium/sdk",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Official Node.js SDK for BlaziumPay - Production-ready crypto payment infrastructure for TON, Solana, and Bitcoin",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",