pakasir-js 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -55,6 +55,18 @@ const txn = await pakasir.getTransaction({ order_id: 'ORD456' });
55
55
  console.log(txn.data?.status); // 'pending' | 'success' | 'failed'
56
56
  ```
57
57
 
58
+ ### Poll Transaction Status (Alternative to Webhooks)
59
+
60
+ ```typescript
61
+ // Poll every 2 seconds, up to 30 attempts (1 minute timeout)
62
+ const result = await pakasir.pollTransaction(
63
+ { order_id: 'ORD456' },
64
+ { interval: 2000, maxAttempts: 30 }
65
+ );
66
+
67
+ console.log(result.data?.status); // Returns when status changes or timeout
68
+ ```
69
+
58
70
  ## API Reference
59
71
 
60
72
  | Method | Params | Returns |
@@ -62,6 +74,7 @@ console.log(txn.data?.status); // 'pending' | 'success' | 'failed'
62
74
  | `createPaymentUrl(params)` | `amount, order_id, redirect_url?, qris_only?` | `string` (URL) |
63
75
  | `createTransaction(method, params)` | `method: 'qris' \| 'bni_va' \| ...`, `amount, order_id, ...` | `Promise<TransactionResponse>` |
64
76
  | `getTransaction(params)` | `order_id` | `Promise<TransactionResponse>` |
77
+ | `pollTransaction(params, options)` | `order_id`, `interval?, maxAttempts?` | `Promise<TransactionResponse>` |
65
78
  | `cancelTransaction(params)` | `order_id` | `Promise<TransactionResponse>` |
66
79
  | `simulatePayment(params)` | `order_id` | `Promise<TransactionResponse>` |
67
80
  | `validateWebhook(payload)` | webhook payload object | `boolean` |
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var i=class r extends Error{constructor(t){super(t),this.name="PakasirError",Object.setPrototypeOf(this,r.prototype);}},n=class r extends i{constructor(e,a){super(`HTTP ${e}: ${a}`);this.status=e;this.body=a;this.name="HttpError",Object.setPrototypeOf(this,r.prototype);}};async function o(r,t){let e=await fetch(r,t),a=await e.text();if(!e.ok)throw new n(e.status,a);try{return JSON.parse(a)}catch{return a}}var y="https://app.pakasir.com";function u(r,t,e="qris"){let{amount:a,order_id:p,redirect_url:d,qris_only:_}=t,h=e==="paypal"?`/paypal/${r}/${a}`:`/pay/${r}/${a}`,s=new URLSearchParams;return s.set("order_id",p),d&&s.set("redirect",d),_&&e!=="paypal"&&s.set("qris_only","1"),`${y}${h}?${s.toString()}`}function l(r,t,e){return `${y}/api/transactiondetail?project=${encodeURIComponent(t)}&order_id=${encodeURIComponent(e)}`}function P(r,t){return !r||typeof r!="object"?false:["project","order_id","amount","status","method"].every(p=>Object.prototype.hasOwnProperty.call(r,p))}var c="https://app.pakasir.com",m=class{constructor(t){this.project=t.project,this.apiKey=t.apiKey,this.sandbox=t.sandbox??this.apiKey.startsWith("sk_test_");}createPaymentUrl(t){return u(this.project,t)}async createTransaction(t,e){let a={amount:e.amount,order_id:e.order_id,customer_phone:e.customer_phone||"",customer_email:e.customer_email||"",customer_name:e.customer_name||"",customer_bank:e.customer_bank||"",return_url:e.return_url||"",expired_time:e.expired_time||3600};return o(`${c}/api/transactioncreate/${t}`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify(a)})}async getTransaction(t){let e=l("transactiondetail",this.project,t.order_id);return o(e,{headers:{apikey:this.apiKey}})}async cancelTransaction(t){return o(`${c}/api/transactioncancel`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}async simulatePayment(t){return o(`${c}/api/paymentsimulation`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}validateWebhook(t){return P(t,this.apiKey)}};var g={QRIS:"qris",CIMB_VA:"cimb_niaga_va",BNI_VA:"bni_va",BRI_VA:"bri_va",PERMATA_VA:"permata_va",MAYBANK_VA:"maybank_va",ATM_BERSAMA_VA:"atm_bersama_va",ARTHA_GRAHA_VA:"artha_graha_va",SAMPOERNA_VA:"sampoerna_va",BNC_VA:"bnc_va",PAYPAL:"paypal"};
2
- exports.HttpError=n;exports.Pakasir=m;exports.PakasirError=i;exports.PaymentMethod=g;
1
+ 'use strict';var d=class r extends Error{constructor(t){super(t),this.name="PakasirError",Object.setPrototypeOf(this,r.prototype);}},p=class r extends d{constructor(e,a){super(`HTTP ${e}: ${a}`);this.status=e;this.body=a;this.name="HttpError",Object.setPrototypeOf(this,r.prototype);}};async function c(r,t){let e=await fetch(r,t),a=await e.text();if(!e.ok)throw new p(e.status,a);try{return JSON.parse(a)}catch{return a}}var l="https://app.pakasir.com";function P(r,t,e="qris"){let{amount:a,order_id:n,redirect_url:o,qris_only:m}=t,i=e==="paypal"?`/paypal/${r}/${a}`:`/pay/${r}/${a}`,s=new URLSearchParams;return s.set("order_id",n),o&&s.set("redirect",o),m&&e!=="paypal"&&s.set("qris_only","1"),`${l}${i}?${s.toString()}`}function _(r,t,e){return `${l}/api/transactiondetail?project=${encodeURIComponent(t)}&order_id=${encodeURIComponent(e)}`}function h(r,t){return !r||typeof r!="object"?false:["project","order_id","amount","status","method"].every(n=>Object.prototype.hasOwnProperty.call(r,n))}var y="https://app.pakasir.com",u=class{constructor(t){this.project=t.project,this.apiKey=t.apiKey,this.sandbox=t.sandbox??this.apiKey.startsWith("sk_test_");}createPaymentUrl(t){return P(this.project,t)}async createTransaction(t,e){let a={amount:e.amount,order_id:e.order_id,customer_phone:e.customer_phone||"",customer_email:e.customer_email||"",customer_name:e.customer_name||"",customer_bank:e.customer_bank||"",return_url:e.return_url||"",expired_time:e.expired_time||3600};return c(`${y}/api/transactioncreate/${t}`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify(a)})}async getTransaction(t){let e=_("transactiondetail",this.project,t.order_id);return c(e,{headers:{apikey:this.apiKey}})}async cancelTransaction(t){return c(`${y}/api/transactioncancel`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}async simulatePayment(t){return c(`${y}/api/paymentsimulation`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}validateWebhook(t){return h(t,this.apiKey)}async pollTransaction(t,e={}){let a=e.interval||2e3,n=e.maxAttempts||30,o=0;for(;o<n;){let m=await this.getTransaction(t),i=m.data?.status;if(i==="success"||i==="failed"||i==="expired")return m;o++,o<n&&await new Promise(s=>setTimeout(s,a));}return {status:"timeout",message:"Transaction polling timeout",data:{order_id:t.order_id,amount:0,status:"timeout"}}}};var g={QRIS:"qris",CIMB_VA:"cimb_niaga_va",BNI_VA:"bni_va",BRI_VA:"bri_va",PERMATA_VA:"permata_va",MAYBANK_VA:"maybank_va",ATM_BERSAMA_VA:"atm_bersama_va",ARTHA_GRAHA_VA:"artha_graha_va",SAMPOERNA_VA:"sampoerna_va",BNC_VA:"bnc_va",PAYPAL:"paypal"};
2
+ exports.HttpError=p;exports.Pakasir=u;exports.PakasirError=d;exports.PaymentMethod=g;
package/dist/index.d.cts CHANGED
@@ -65,6 +65,10 @@ interface WebhookPayload {
65
65
  method: PaymentMethodType;
66
66
  [key: string]: any;
67
67
  }
68
+ interface PollOptions {
69
+ interval?: number;
70
+ maxAttempts?: number;
71
+ }
68
72
 
69
73
  declare class Pakasir {
70
74
  private project;
@@ -77,6 +81,7 @@ declare class Pakasir {
77
81
  cancelTransaction(params: CancelTransactionParams): Promise<TransactionResponse>;
78
82
  simulatePayment(params: SimulatePaymentParams): Promise<TransactionResponse>;
79
83
  validateWebhook(payload: WebhookPayload): boolean;
84
+ pollTransaction(params: GetTransactionParams, options?: PollOptions): Promise<TransactionResponse>;
80
85
  }
81
86
 
82
87
  declare class PakasirError extends Error {
@@ -88,4 +93,4 @@ declare class HttpError extends PakasirError {
88
93
  constructor(status: number, body: string);
89
94
  }
90
95
 
91
- export { type CancelTransactionParams, type CreatePaymentUrlParams, type CreateTransactionParams, type GetTransactionParams, HttpError, Pakasir, type PakasirConfig, PakasirError, PaymentMethod, type PaymentMethodType, type SimulatePaymentParams, type TransactionResponse, type WebhookPayload };
96
+ export { type CancelTransactionParams, type CreatePaymentUrlParams, type CreateTransactionParams, type GetTransactionParams, HttpError, Pakasir, type PakasirConfig, PakasirError, PaymentMethod, type PaymentMethodType, type PollOptions, type SimulatePaymentParams, type TransactionResponse, type WebhookPayload };
package/dist/index.d.ts CHANGED
@@ -65,6 +65,10 @@ interface WebhookPayload {
65
65
  method: PaymentMethodType;
66
66
  [key: string]: any;
67
67
  }
68
+ interface PollOptions {
69
+ interval?: number;
70
+ maxAttempts?: number;
71
+ }
68
72
 
69
73
  declare class Pakasir {
70
74
  private project;
@@ -77,6 +81,7 @@ declare class Pakasir {
77
81
  cancelTransaction(params: CancelTransactionParams): Promise<TransactionResponse>;
78
82
  simulatePayment(params: SimulatePaymentParams): Promise<TransactionResponse>;
79
83
  validateWebhook(payload: WebhookPayload): boolean;
84
+ pollTransaction(params: GetTransactionParams, options?: PollOptions): Promise<TransactionResponse>;
80
85
  }
81
86
 
82
87
  declare class PakasirError extends Error {
@@ -88,4 +93,4 @@ declare class HttpError extends PakasirError {
88
93
  constructor(status: number, body: string);
89
94
  }
90
95
 
91
- export { type CancelTransactionParams, type CreatePaymentUrlParams, type CreateTransactionParams, type GetTransactionParams, HttpError, Pakasir, type PakasirConfig, PakasirError, PaymentMethod, type PaymentMethodType, type SimulatePaymentParams, type TransactionResponse, type WebhookPayload };
96
+ export { type CancelTransactionParams, type CreatePaymentUrlParams, type CreateTransactionParams, type GetTransactionParams, HttpError, Pakasir, type PakasirConfig, PakasirError, PaymentMethod, type PaymentMethodType, type PollOptions, type SimulatePaymentParams, type TransactionResponse, type WebhookPayload };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var i=class r extends Error{constructor(t){super(t),this.name="PakasirError",Object.setPrototypeOf(this,r.prototype);}},n=class r extends i{constructor(e,a){super(`HTTP ${e}: ${a}`);this.status=e;this.body=a;this.name="HttpError",Object.setPrototypeOf(this,r.prototype);}};async function o(r,t){let e=await fetch(r,t),a=await e.text();if(!e.ok)throw new n(e.status,a);try{return JSON.parse(a)}catch{return a}}var y="https://app.pakasir.com";function u(r,t,e="qris"){let{amount:a,order_id:p,redirect_url:d,qris_only:_}=t,h=e==="paypal"?`/paypal/${r}/${a}`:`/pay/${r}/${a}`,s=new URLSearchParams;return s.set("order_id",p),d&&s.set("redirect",d),_&&e!=="paypal"&&s.set("qris_only","1"),`${y}${h}?${s.toString()}`}function l(r,t,e){return `${y}/api/transactiondetail?project=${encodeURIComponent(t)}&order_id=${encodeURIComponent(e)}`}function P(r,t){return !r||typeof r!="object"?false:["project","order_id","amount","status","method"].every(p=>Object.prototype.hasOwnProperty.call(r,p))}var c="https://app.pakasir.com",m=class{constructor(t){this.project=t.project,this.apiKey=t.apiKey,this.sandbox=t.sandbox??this.apiKey.startsWith("sk_test_");}createPaymentUrl(t){return u(this.project,t)}async createTransaction(t,e){let a={amount:e.amount,order_id:e.order_id,customer_phone:e.customer_phone||"",customer_email:e.customer_email||"",customer_name:e.customer_name||"",customer_bank:e.customer_bank||"",return_url:e.return_url||"",expired_time:e.expired_time||3600};return o(`${c}/api/transactioncreate/${t}`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify(a)})}async getTransaction(t){let e=l("transactiondetail",this.project,t.order_id);return o(e,{headers:{apikey:this.apiKey}})}async cancelTransaction(t){return o(`${c}/api/transactioncancel`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}async simulatePayment(t){return o(`${c}/api/paymentsimulation`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}validateWebhook(t){return P(t,this.apiKey)}};var g={QRIS:"qris",CIMB_VA:"cimb_niaga_va",BNI_VA:"bni_va",BRI_VA:"bri_va",PERMATA_VA:"permata_va",MAYBANK_VA:"maybank_va",ATM_BERSAMA_VA:"atm_bersama_va",ARTHA_GRAHA_VA:"artha_graha_va",SAMPOERNA_VA:"sampoerna_va",BNC_VA:"bnc_va",PAYPAL:"paypal"};
2
- export{n as HttpError,m as Pakasir,i as PakasirError,g as PaymentMethod};
1
+ var d=class r extends Error{constructor(t){super(t),this.name="PakasirError",Object.setPrototypeOf(this,r.prototype);}},p=class r extends d{constructor(e,a){super(`HTTP ${e}: ${a}`);this.status=e;this.body=a;this.name="HttpError",Object.setPrototypeOf(this,r.prototype);}};async function c(r,t){let e=await fetch(r,t),a=await e.text();if(!e.ok)throw new p(e.status,a);try{return JSON.parse(a)}catch{return a}}var l="https://app.pakasir.com";function P(r,t,e="qris"){let{amount:a,order_id:n,redirect_url:o,qris_only:m}=t,i=e==="paypal"?`/paypal/${r}/${a}`:`/pay/${r}/${a}`,s=new URLSearchParams;return s.set("order_id",n),o&&s.set("redirect",o),m&&e!=="paypal"&&s.set("qris_only","1"),`${l}${i}?${s.toString()}`}function _(r,t,e){return `${l}/api/transactiondetail?project=${encodeURIComponent(t)}&order_id=${encodeURIComponent(e)}`}function h(r,t){return !r||typeof r!="object"?false:["project","order_id","amount","status","method"].every(n=>Object.prototype.hasOwnProperty.call(r,n))}var y="https://app.pakasir.com",u=class{constructor(t){this.project=t.project,this.apiKey=t.apiKey,this.sandbox=t.sandbox??this.apiKey.startsWith("sk_test_");}createPaymentUrl(t){return P(this.project,t)}async createTransaction(t,e){let a={amount:e.amount,order_id:e.order_id,customer_phone:e.customer_phone||"",customer_email:e.customer_email||"",customer_name:e.customer_name||"",customer_bank:e.customer_bank||"",return_url:e.return_url||"",expired_time:e.expired_time||3600};return c(`${y}/api/transactioncreate/${t}`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify(a)})}async getTransaction(t){let e=_("transactiondetail",this.project,t.order_id);return c(e,{headers:{apikey:this.apiKey}})}async cancelTransaction(t){return c(`${y}/api/transactioncancel`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}async simulatePayment(t){return c(`${y}/api/paymentsimulation`,{method:"POST",headers:{"Content-Type":"application/json",apikey:this.apiKey},body:JSON.stringify({project:this.project,order_id:t.order_id})})}validateWebhook(t){return h(t,this.apiKey)}async pollTransaction(t,e={}){let a=e.interval||2e3,n=e.maxAttempts||30,o=0;for(;o<n;){let m=await this.getTransaction(t),i=m.data?.status;if(i==="success"||i==="failed"||i==="expired")return m;o++,o<n&&await new Promise(s=>setTimeout(s,a));}return {status:"timeout",message:"Transaction polling timeout",data:{order_id:t.order_id,amount:0,status:"timeout"}}}};var g={QRIS:"qris",CIMB_VA:"cimb_niaga_va",BNI_VA:"bni_va",BRI_VA:"bri_va",PERMATA_VA:"permata_va",MAYBANK_VA:"maybank_va",ATM_BERSAMA_VA:"atm_bersama_va",ARTHA_GRAHA_VA:"artha_graha_va",SAMPOERNA_VA:"sampoerna_va",BNC_VA:"bnc_va",PAYPAL:"paypal"};
2
+ export{p as HttpError,u as Pakasir,d as PakasirError,g as PaymentMethod};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pakasir-js",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "The fastest Pakasir SDK. 4KB. Zero dependencies.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",