phygital-payment-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +120 -0
  2. package/dist/arbiter/client.d.ts +34 -0
  3. package/dist/arbiter/client.d.ts.map +1 -0
  4. package/dist/arbiter/client.js +106 -0
  5. package/dist/arbiter/client.js.map +1 -0
  6. package/dist/core/amounts.d.ts +4 -0
  7. package/dist/core/amounts.d.ts.map +1 -0
  8. package/dist/core/amounts.js +36 -0
  9. package/dist/core/amounts.js.map +1 -0
  10. package/dist/core/bytes.d.ts +11 -0
  11. package/dist/core/bytes.d.ts.map +1 -0
  12. package/dist/core/bytes.js +69 -0
  13. package/dist/core/bytes.js.map +1 -0
  14. package/dist/core/challenge.d.ts +15 -0
  15. package/dist/core/challenge.d.ts.map +1 -0
  16. package/dist/core/challenge.js +24 -0
  17. package/dist/core/challenge.js.map +1 -0
  18. package/dist/core/errors.d.ts +90 -0
  19. package/dist/core/errors.d.ts.map +1 -0
  20. package/dist/core/errors.js +204 -0
  21. package/dist/core/errors.js.map +1 -0
  22. package/dist/core/events.d.ts +113 -0
  23. package/dist/core/events.d.ts.map +1 -0
  24. package/dist/core/events.js +258 -0
  25. package/dist/core/events.js.map +1 -0
  26. package/dist/core/evidence.d.ts +3 -0
  27. package/dist/core/evidence.d.ts.map +1 -0
  28. package/dist/core/evidence.js +7 -0
  29. package/dist/core/evidence.js.map +1 -0
  30. package/dist/core/execution-plan.d.ts +25 -0
  31. package/dist/core/execution-plan.d.ts.map +1 -0
  32. package/dist/core/execution-plan.js +57 -0
  33. package/dist/core/execution-plan.js.map +1 -0
  34. package/dist/core/indexer-store.d.ts +31 -0
  35. package/dist/core/indexer-store.d.ts.map +1 -0
  36. package/dist/core/indexer-store.js +2 -0
  37. package/dist/core/indexer-store.js.map +1 -0
  38. package/dist/core/instruction-codec.d.ts +13 -0
  39. package/dist/core/instruction-codec.d.ts.map +1 -0
  40. package/dist/core/instruction-codec.js +23 -0
  41. package/dist/core/instruction-codec.js.map +1 -0
  42. package/dist/core/payment.d.ts +116 -0
  43. package/dist/core/payment.d.ts.map +1 -0
  44. package/dist/core/payment.js +185 -0
  45. package/dist/core/payment.js.map +1 -0
  46. package/dist/core/pda.d.ts +29 -0
  47. package/dist/core/pda.d.ts.map +1 -0
  48. package/dist/core/pda.js +48 -0
  49. package/dist/core/pda.js.map +1 -0
  50. package/dist/core/provider-fee-payer.d.ts +5 -0
  51. package/dist/core/provider-fee-payer.d.ts.map +1 -0
  52. package/dist/core/provider-fee-payer.js +17 -0
  53. package/dist/core/provider-fee-payer.js.map +1 -0
  54. package/dist/core/provider-transport.d.ts +79 -0
  55. package/dist/core/provider-transport.d.ts.map +1 -0
  56. package/dist/core/provider-transport.js +151 -0
  57. package/dist/core/provider-transport.js.map +1 -0
  58. package/dist/core/status.d.ts +13 -0
  59. package/dist/core/status.d.ts.map +1 -0
  60. package/dist/core/status.js +17 -0
  61. package/dist/core/status.js.map +1 -0
  62. package/dist/core/time.d.ts +29 -0
  63. package/dist/core/time.d.ts.map +1 -0
  64. package/dist/core/time.js +66 -0
  65. package/dist/core/time.js.map +1 -0
  66. package/dist/core/transactions.d.ts +16 -0
  67. package/dist/core/transactions.d.ts.map +1 -0
  68. package/dist/core/transactions.js +87 -0
  69. package/dist/core/transactions.js.map +1 -0
  70. package/dist/generated/accounts/arbiter.d.ts +31 -0
  71. package/dist/generated/accounts/arbiter.d.ts.map +1 -0
  72. package/dist/generated/accounts/arbiter.js +57 -0
  73. package/dist/generated/accounts/arbiter.js.map +1 -0
  74. package/dist/generated/accounts/index.d.ts +5 -0
  75. package/dist/generated/accounts/index.d.ts.map +1 -0
  76. package/dist/generated/accounts/index.js +5 -0
  77. package/dist/generated/accounts/index.js.map +1 -0
  78. package/dist/generated/accounts/merchantOperator.d.ts +25 -0
  79. package/dist/generated/accounts/merchantOperator.d.ts.map +1 -0
  80. package/dist/generated/accounts/merchantOperator.js +49 -0
  81. package/dist/generated/accounts/merchantOperator.js.map +1 -0
  82. package/dist/generated/accounts/payment.d.ts +56 -0
  83. package/dist/generated/accounts/payment.d.ts.map +1 -0
  84. package/dist/generated/accounts/payment.js +82 -0
  85. package/dist/generated/accounts/payment.js.map +1 -0
  86. package/dist/generated/accounts/paymentAccount.d.ts +59 -0
  87. package/dist/generated/accounts/paymentAccount.d.ts.map +1 -0
  88. package/dist/generated/accounts/paymentAccount.js +83 -0
  89. package/dist/generated/accounts/paymentAccount.js.map +1 -0
  90. package/dist/generated/errors/index.d.ts +2 -0
  91. package/dist/generated/errors/index.d.ts.map +1 -0
  92. package/dist/generated/errors/index.js +2 -0
  93. package/dist/generated/errors/index.js.map +1 -0
  94. package/dist/generated/errors/phygitalPayment.d.ts +50 -0
  95. package/dist/generated/errors/phygitalPayment.d.ts.map +1 -0
  96. package/dist/generated/errors/phygitalPayment.js +91 -0
  97. package/dist/generated/errors/phygitalPayment.js.map +1 -0
  98. package/dist/generated/index.d.ts +7 -0
  99. package/dist/generated/index.d.ts.map +1 -0
  100. package/dist/generated/index.js +7 -0
  101. package/dist/generated/index.js.map +1 -0
  102. package/dist/generated/instructions/addMerchantOperator.d.ts +49 -0
  103. package/dist/generated/instructions/addMerchantOperator.d.ts.map +1 -0
  104. package/dist/generated/instructions/addMerchantOperator.js +110 -0
  105. package/dist/generated/instructions/addMerchantOperator.js.map +1 -0
  106. package/dist/generated/instructions/autoRefund.d.ts +48 -0
  107. package/dist/generated/instructions/autoRefund.d.ts.map +1 -0
  108. package/dist/generated/instructions/autoRefund.js +91 -0
  109. package/dist/generated/instructions/autoRefund.js.map +1 -0
  110. package/dist/generated/instructions/autoSettle.d.ts +45 -0
  111. package/dist/generated/instructions/autoSettle.d.ts.map +1 -0
  112. package/dist/generated/instructions/autoSettle.js +82 -0
  113. package/dist/generated/instructions/autoSettle.js.map +1 -0
  114. package/dist/generated/instructions/closeExpiredPayment.d.ts +36 -0
  115. package/dist/generated/instructions/closeExpiredPayment.d.ts.map +1 -0
  116. package/dist/generated/instructions/closeExpiredPayment.js +64 -0
  117. package/dist/generated/instructions/closeExpiredPayment.js.map +1 -0
  118. package/dist/generated/instructions/dispute.d.ts +49 -0
  119. package/dist/generated/instructions/dispute.d.ts.map +1 -0
  120. package/dist/generated/instructions/dispute.js +84 -0
  121. package/dist/generated/instructions/dispute.js.map +1 -0
  122. package/dist/generated/instructions/disputeAuthorization.d.ts +73 -0
  123. package/dist/generated/instructions/disputeAuthorization.d.ts.map +1 -0
  124. package/dist/generated/instructions/disputeAuthorization.js +149 -0
  125. package/dist/generated/instructions/disputeAuthorization.js.map +1 -0
  126. package/dist/generated/instructions/index.d.ts +21 -0
  127. package/dist/generated/instructions/index.d.ts.map +1 -0
  128. package/dist/generated/instructions/index.js +21 -0
  129. package/dist/generated/instructions/index.js.map +1 -0
  130. package/dist/generated/instructions/merchantRefund.d.ts +43 -0
  131. package/dist/generated/instructions/merchantRefund.d.ts.map +1 -0
  132. package/dist/generated/instructions/merchantRefund.js +78 -0
  133. package/dist/generated/instructions/merchantRefund.js.map +1 -0
  134. package/dist/generated/instructions/merchantRespond.d.ts +43 -0
  135. package/dist/generated/instructions/merchantRespond.d.ts.map +1 -0
  136. package/dist/generated/instructions/merchantRespond.js +78 -0
  137. package/dist/generated/instructions/merchantRespond.js.map +1 -0
  138. package/dist/generated/instructions/refundSettled.d.ts +52 -0
  139. package/dist/generated/instructions/refundSettled.d.ts.map +1 -0
  140. package/dist/generated/instructions/refundSettled.js +88 -0
  141. package/dist/generated/instructions/refundSettled.js.map +1 -0
  142. package/dist/generated/instructions/registerArbiter.d.ts +44 -0
  143. package/dist/generated/instructions/registerArbiter.d.ts.map +1 -0
  144. package/dist/generated/instructions/registerArbiter.js +94 -0
  145. package/dist/generated/instructions/registerArbiter.js.map +1 -0
  146. package/dist/generated/instructions/removeMerchantOperator.d.ts +45 -0
  147. package/dist/generated/instructions/removeMerchantOperator.d.ts.map +1 -0
  148. package/dist/generated/instructions/removeMerchantOperator.js +97 -0
  149. package/dist/generated/instructions/removeMerchantOperator.js.map +1 -0
  150. package/dist/generated/instructions/resolveDispute.d.ts +55 -0
  151. package/dist/generated/instructions/resolveDispute.d.ts.map +1 -0
  152. package/dist/generated/instructions/resolveDispute.js +91 -0
  153. package/dist/generated/instructions/resolveDispute.js.map +1 -0
  154. package/dist/generated/instructions/setApprovedArbiter.d.ts +57 -0
  155. package/dist/generated/instructions/setApprovedArbiter.d.ts.map +1 -0
  156. package/dist/generated/instructions/setApprovedArbiter.js +121 -0
  157. package/dist/generated/instructions/setApprovedArbiter.js.map +1 -0
  158. package/dist/generated/instructions/setAuthorizedCredential.d.ts +64 -0
  159. package/dist/generated/instructions/setAuthorizedCredential.d.ts.map +1 -0
  160. package/dist/generated/instructions/setAuthorizedCredential.js +138 -0
  161. package/dist/generated/instructions/setAuthorizedCredential.js.map +1 -0
  162. package/dist/generated/instructions/setPaymentEnabler.d.ts +65 -0
  163. package/dist/generated/instructions/setPaymentEnabler.d.ts.map +1 -0
  164. package/dist/generated/instructions/setPaymentEnabler.js +136 -0
  165. package/dist/generated/instructions/setPaymentEnabler.js.map +1 -0
  166. package/dist/generated/instructions/setReserve.d.ts +53 -0
  167. package/dist/generated/instructions/setReserve.d.ts.map +1 -0
  168. package/dist/generated/instructions/setReserve.js +109 -0
  169. package/dist/generated/instructions/setReserve.js.map +1 -0
  170. package/dist/generated/instructions/setTapLimit.d.ts +53 -0
  171. package/dist/generated/instructions/setTapLimit.d.ts.map +1 -0
  172. package/dist/generated/instructions/setTapLimit.js +109 -0
  173. package/dist/generated/instructions/setTapLimit.js.map +1 -0
  174. package/dist/generated/instructions/transfer.d.ts +97 -0
  175. package/dist/generated/instructions/transfer.d.ts.map +1 -0
  176. package/dist/generated/instructions/transfer.js +182 -0
  177. package/dist/generated/instructions/transfer.js.map +1 -0
  178. package/dist/generated/instructions/withdrawDispute.d.ts +36 -0
  179. package/dist/generated/instructions/withdrawDispute.d.ts.map +1 -0
  180. package/dist/generated/instructions/withdrawDispute.js +61 -0
  181. package/dist/generated/instructions/withdrawDispute.js.map +1 -0
  182. package/dist/generated/instructions/withdrawFromEscrow.d.ts +61 -0
  183. package/dist/generated/instructions/withdrawFromEscrow.d.ts.map +1 -0
  184. package/dist/generated/instructions/withdrawFromEscrow.js +132 -0
  185. package/dist/generated/instructions/withdrawFromEscrow.js.map +1 -0
  186. package/dist/generated/pdas/arbiterAccount.d.ts +8 -0
  187. package/dist/generated/pdas/arbiterAccount.d.ts.map +1 -0
  188. package/dist/generated/pdas/arbiterAccount.js +12 -0
  189. package/dist/generated/pdas/arbiterAccount.js.map +1 -0
  190. package/dist/generated/pdas/index.d.ts +6 -0
  191. package/dist/generated/pdas/index.d.ts.map +1 -0
  192. package/dist/generated/pdas/index.js +6 -0
  193. package/dist/generated/pdas/index.js.map +1 -0
  194. package/dist/generated/pdas/merchantOperator.d.ts +9 -0
  195. package/dist/generated/pdas/merchantOperator.d.ts.map +1 -0
  196. package/dist/generated/pdas/merchantOperator.js +16 -0
  197. package/dist/generated/pdas/merchantOperator.js.map +1 -0
  198. package/dist/generated/pdas/payment.d.ts +9 -0
  199. package/dist/generated/pdas/payment.d.ts.map +1 -0
  200. package/dist/generated/pdas/payment.js +13 -0
  201. package/dist/generated/pdas/payment.js.map +1 -0
  202. package/dist/generated/pdas/paymentAccount.d.ts +10 -0
  203. package/dist/generated/pdas/paymentAccount.d.ts.map +1 -0
  204. package/dist/generated/pdas/paymentAccount.js +16 -0
  205. package/dist/generated/pdas/paymentAccount.js.map +1 -0
  206. package/dist/generated/pdas/setApprovedArbiterArbiterAccount.d.ts +8 -0
  207. package/dist/generated/pdas/setApprovedArbiterArbiterAccount.d.ts.map +1 -0
  208. package/dist/generated/pdas/setApprovedArbiterArbiterAccount.js +12 -0
  209. package/dist/generated/pdas/setApprovedArbiterArbiterAccount.js.map +1 -0
  210. package/dist/generated/programs/index.d.ts +2 -0
  211. package/dist/generated/programs/index.d.ts.map +1 -0
  212. package/dist/generated/programs/index.js +2 -0
  213. package/dist/generated/programs/index.js.map +1 -0
  214. package/dist/generated/programs/phygitalPayment.d.ts +132 -0
  215. package/dist/generated/programs/phygitalPayment.d.ts.map +1 -0
  216. package/dist/generated/programs/phygitalPayment.js +322 -0
  217. package/dist/generated/programs/phygitalPayment.js.map +1 -0
  218. package/dist/generated/types/index.d.ts +2 -0
  219. package/dist/generated/types/index.d.ts.map +1 -0
  220. package/dist/generated/types/index.js +2 -0
  221. package/dist/generated/types/index.js.map +1 -0
  222. package/dist/generated/types/paymentFlags.d.ts +7 -0
  223. package/dist/generated/types/paymentFlags.d.ts.map +1 -0
  224. package/dist/generated/types/paymentFlags.js +11 -0
  225. package/dist/generated/types/paymentFlags.js.map +1 -0
  226. package/dist/index.d.ts +25 -0
  227. package/dist/index.d.ts.map +1 -0
  228. package/dist/index.js +23 -0
  229. package/dist/index.js.map +1 -0
  230. package/dist/merchant/charge.d.ts +106 -0
  231. package/dist/merchant/charge.d.ts.map +1 -0
  232. package/dist/merchant/charge.js +311 -0
  233. package/dist/merchant/charge.js.map +1 -0
  234. package/dist/merchant/client.d.ts +80 -0
  235. package/dist/merchant/client.d.ts.map +1 -0
  236. package/dist/merchant/client.js +282 -0
  237. package/dist/merchant/client.js.map +1 -0
  238. package/dist/merchant/deferred-queue.d.ts +35 -0
  239. package/dist/merchant/deferred-queue.d.ts.map +1 -0
  240. package/dist/merchant/deferred-queue.js +237 -0
  241. package/dist/merchant/deferred-queue.js.map +1 -0
  242. package/dist/merchant/deferred-store.d.ts +67 -0
  243. package/dist/merchant/deferred-store.d.ts.map +1 -0
  244. package/dist/merchant/deferred-store.js +126 -0
  245. package/dist/merchant/deferred-store.js.map +1 -0
  246. package/dist/merchant/indexed-db-store.d.ts +6 -0
  247. package/dist/merchant/indexed-db-store.d.ts.map +1 -0
  248. package/dist/merchant/indexed-db-store.js +121 -0
  249. package/dist/merchant/indexed-db-store.js.map +1 -0
  250. package/dist/merchant/tap.d.ts +11 -0
  251. package/dist/merchant/tap.d.ts.map +1 -0
  252. package/dist/merchant/tap.js +47 -0
  253. package/dist/merchant/tap.js.map +1 -0
  254. package/dist/server/closable-store.d.ts +12 -0
  255. package/dist/server/closable-store.d.ts.map +1 -0
  256. package/dist/server/closable-store.js +16 -0
  257. package/dist/server/closable-store.js.map +1 -0
  258. package/dist/server/deferred-flusher.d.ts +19 -0
  259. package/dist/server/deferred-flusher.d.ts.map +1 -0
  260. package/dist/server/deferred-flusher.js +57 -0
  261. package/dist/server/deferred-flusher.js.map +1 -0
  262. package/dist/server/enabler-service.d.ts +20 -0
  263. package/dist/server/enabler-service.d.ts.map +1 -0
  264. package/dist/server/enabler-service.js +191 -0
  265. package/dist/server/enabler-service.js.map +1 -0
  266. package/dist/server/enabler-signer.d.ts +11 -0
  267. package/dist/server/enabler-signer.d.ts.map +1 -0
  268. package/dist/server/enabler-signer.js +37 -0
  269. package/dist/server/enabler-signer.js.map +1 -0
  270. package/dist/server/fee-budget.d.ts +22 -0
  271. package/dist/server/fee-budget.d.ts.map +1 -0
  272. package/dist/server/fee-budget.js +58 -0
  273. package/dist/server/fee-budget.js.map +1 -0
  274. package/dist/server/fee-payer.d.ts +27 -0
  275. package/dist/server/fee-payer.d.ts.map +1 -0
  276. package/dist/server/fee-payer.js +167 -0
  277. package/dist/server/fee-payer.js.map +1 -0
  278. package/dist/server/index.d.ts +14 -0
  279. package/dist/server/index.d.ts.map +1 -0
  280. package/dist/server/index.js +14 -0
  281. package/dist/server/index.js.map +1 -0
  282. package/dist/server/indexer.d.ts +50 -0
  283. package/dist/server/indexer.d.ts.map +1 -0
  284. package/dist/server/indexer.js +218 -0
  285. package/dist/server/indexer.js.map +1 -0
  286. package/dist/server/keeper.d.ts +34 -0
  287. package/dist/server/keeper.d.ts.map +1 -0
  288. package/dist/server/keeper.js +246 -0
  289. package/dist/server/keeper.js.map +1 -0
  290. package/dist/server/pending-taps.d.ts +12 -0
  291. package/dist/server/pending-taps.d.ts.map +1 -0
  292. package/dist/server/pending-taps.js +19 -0
  293. package/dist/server/pending-taps.js.map +1 -0
  294. package/dist/server/policy.d.ts +46 -0
  295. package/dist/server/policy.d.ts.map +1 -0
  296. package/dist/server/policy.js +47 -0
  297. package/dist/server/policy.js.map +1 -0
  298. package/dist/server/provider-deferred-queue.d.ts +21 -0
  299. package/dist/server/provider-deferred-queue.d.ts.map +1 -0
  300. package/dist/server/provider-deferred-queue.js +69 -0
  301. package/dist/server/provider-deferred-queue.js.map +1 -0
  302. package/dist/server/queue.d.ts +43 -0
  303. package/dist/server/queue.d.ts.map +1 -0
  304. package/dist/server/queue.js +105 -0
  305. package/dist/server/queue.js.map +1 -0
  306. package/dist/server/router.d.ts +21 -0
  307. package/dist/server/router.d.ts.map +1 -0
  308. package/dist/server/router.js +137 -0
  309. package/dist/server/router.js.map +1 -0
  310. package/dist/server/webauthn.d.ts +2 -0
  311. package/dist/server/webauthn.d.ts.map +1 -0
  312. package/dist/server/webauthn.js +19 -0
  313. package/dist/server/webauthn.js.map +1 -0
  314. package/dist/wallet/client.d.ts +106 -0
  315. package/dist/wallet/client.d.ts.map +1 -0
  316. package/dist/wallet/client.js +354 -0
  317. package/dist/wallet/client.js.map +1 -0
  318. package/package.json +75 -0
@@ -0,0 +1,282 @@
1
+ import { getCreateAssociatedTokenIdempotentInstructionAsync, TOKEN_PROGRAM_ADDRESS, } from "@solana-program/token";
2
+ import { getAddMerchantOperatorInstructionAsync } from "../generated/instructions/addMerchantOperator.js";
3
+ import { getMerchantRefundInstruction } from "../generated/instructions/merchantRefund.js";
4
+ import { getMerchantRespondInstruction } from "../generated/instructions/merchantRespond.js";
5
+ import { getRefundSettledInstruction } from "../generated/instructions/refundSettled.js";
6
+ import { getRemoveMerchantOperatorInstructionAsync } from "../generated/instructions/removeMerchantOperator.js";
7
+ import { ConfigurationError, InvalidAmountError } from "../core/errors.js";
8
+ import { collectEventsForAddress, eventParticipants, subscribeToPaymentEvents, } from "../core/events.js";
9
+ import { fetchPaymentSummary, } from "../core/payment.js";
10
+ import { deriveAssociatedTokenAddress, deriveMerchantOperatorAddress, derivePaymentAccountAddress, derivePaymentAddressFromSeeds, } from "../core/pda.js";
11
+ import { createProviderFeePayerSigner } from "../core/provider-fee-payer.js";
12
+ import { createProviderTransport, } from "../core/provider-transport.js";
13
+ import { PaymentStatus } from "../core/status.js";
14
+ import { createTransactionRuntime } from "../core/transactions.js";
15
+ import { charge as runCharge, resumeCharge as runResumeCharge, } from "./charge.js";
16
+ import { createDeferredQueue, DEFAULT_FLUSH_INTERVAL_MS } from "./deferred-queue.js";
17
+ import { createInMemoryDeferredStore, } from "./deferred-store.js";
18
+ import { createIndexedDbDeferredStore } from "./indexed-db-store.js";
19
+ export function createMerchantClient(config) {
20
+ const tokenProgram = config.tokenProgram ?? TOKEN_PROGRAM_ADDRESS;
21
+ const runtime = createTransactionRuntime(config);
22
+ const provider = "getEnablerSignature" in config.provider
23
+ ? config.provider
24
+ : createProviderTransport(config.provider);
25
+ const deferredStore = config.deferredStore ??
26
+ (typeof globalThis.indexedDB !== "undefined"
27
+ ? createIndexedDbDeferredStore()
28
+ : createInMemoryDeferredStore());
29
+ let chargePayerPromise = null;
30
+ function getChargePayer() {
31
+ if (config.feePayer)
32
+ return Promise.resolve(config.feePayer);
33
+ if (!chargePayerPromise) {
34
+ chargePayerPromise = createProviderFeePayerSigner(provider);
35
+ }
36
+ return chargePayerPromise;
37
+ }
38
+ let deferredQueuePromise = null;
39
+ async function getDeferredQueue() {
40
+ if (!deferredQueuePromise) {
41
+ deferredQueuePromise = getChargePayer().then((feePayer) => createDeferredQueue({
42
+ rpc: config.rpc,
43
+ store: deferredStore,
44
+ runtime,
45
+ feePayer,
46
+ provider,
47
+ merchant: config.merchant,
48
+ }));
49
+ }
50
+ return deferredQueuePromise;
51
+ }
52
+ async function restoreAndFlush() {
53
+ const queue = await getDeferredQueue();
54
+ try {
55
+ await queue.reconcileWithProviderAndChain();
56
+ }
57
+ catch {
58
+ }
59
+ try {
60
+ await queue.flush();
61
+ }
62
+ catch {
63
+ }
64
+ }
65
+ const autoFlush = config.autoFlush !== false;
66
+ let flushTimer = null;
67
+ if (autoFlush) {
68
+ void restoreAndFlush();
69
+ flushTimer = setInterval(() => {
70
+ void restoreAndFlush();
71
+ }, config.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS);
72
+ if (typeof flushTimer === "object" && flushTimer && "unref" in flushTimer) {
73
+ flushTimer.unref?.();
74
+ }
75
+ if (typeof globalThis.addEventListener === "function") {
76
+ globalThis.addEventListener("online", () => void restoreAndFlush());
77
+ globalThis.addEventListener("visibilitychange", () => {
78
+ if (typeof document !== "undefined" &&
79
+ document.visibilityState === "visible") {
80
+ void restoreAndFlush();
81
+ }
82
+ });
83
+ }
84
+ }
85
+ function requireTreasury(override, context = "this merchant operation") {
86
+ const signer = override ?? config.treasurySigner;
87
+ if (!signer) {
88
+ throw new ConfigurationError(`treasurySigner is required for ${context}. Pass it to createMerchantClient (charge uses the provider fee payer and does not need it).`);
89
+ }
90
+ return signer;
91
+ }
92
+ async function merchantAuthority() {
93
+ const feePayer = requireTreasury(undefined, "refund/respond");
94
+ if (config.operator) {
95
+ return {
96
+ authority: config.operator,
97
+ feePayer,
98
+ merchantOperator: await deriveMerchantOperatorAddress({
99
+ treasury: config.merchant,
100
+ operator: config.operator.address,
101
+ }),
102
+ };
103
+ }
104
+ return { authority: feePayer, feePayer, merchantOperator: undefined };
105
+ }
106
+ async function fetchPaymentOrThrow(payment) {
107
+ const summary = await fetchPaymentSummary(config.rpc, payment);
108
+ if (summary === null) {
109
+ throw new ConfigurationError(`Payment ${payment} does not exist on-chain. It may have already settled or been refunded (both close the account) — check getReceipt/recentPayments instead of retrying.`);
110
+ }
111
+ return summary;
112
+ }
113
+ return {
114
+ async charge(params) {
115
+ const feePayer = await getChargePayer();
116
+ const deferredQueue = await getDeferredQueue();
117
+ return runCharge({
118
+ rpc: config.rpc,
119
+ runtime,
120
+ provider,
121
+ merchant: config.merchant,
122
+ feePayer,
123
+ tokenProgram,
124
+ deferredQueue,
125
+ rpId: config.rpId,
126
+ allowDeferral: config.allowDeferral,
127
+ }, params);
128
+ },
129
+ async resumeCharge(cosigned, params = {}) {
130
+ const feePayer = await getChargePayer();
131
+ const deferredQueue = await getDeferredQueue();
132
+ return runResumeCharge({
133
+ rpc: config.rpc,
134
+ runtime,
135
+ provider,
136
+ merchant: config.merchant,
137
+ feePayer,
138
+ tokenProgram,
139
+ deferredQueue,
140
+ rpId: config.rpId,
141
+ allowDeferral: config.allowDeferral,
142
+ }, cosigned, params);
143
+ },
144
+ async flushDeferred() {
145
+ const queue = await getDeferredQueue();
146
+ await queue.reconcileWithProviderAndChain().catch(() => ({
147
+ landed: 0,
148
+ restored: 0,
149
+ }));
150
+ return queue.flush();
151
+ },
152
+ async reconcileDeferred() {
153
+ return (await getDeferredQueue()).reconcileWithProviderAndChain();
154
+ },
155
+ async restoreDeferredFromProvider() {
156
+ return (await getDeferredQueue()).restoreFromProvider();
157
+ },
158
+ async refund({ payment, amount }) {
159
+ const summary = await fetchPaymentOrThrow(payment);
160
+ const refunded = amount ?? summary.amount;
161
+ if (refunded <= 0n || refunded > summary.amount) {
162
+ throw new InvalidAmountError(`Refund amount ${refunded} must be within (0, ${summary.amount}].`);
163
+ }
164
+ if (summary.status === PaymentStatus.Disputed &&
165
+ refunded !== summary.amount) {
166
+ throw new InvalidAmountError("A disputed payment can only be refunded in full (this concedes the dispute and returns the payer's bond). Omit `amount` to refund everything.");
167
+ }
168
+ const { authority, feePayer, merchantOperator } = await merchantAuthority();
169
+ const paymentAccount = await derivePaymentAccountAddress({
170
+ owner: summary.payer,
171
+ mint: summary.mint,
172
+ tokenProgram: summary.tokenProgram,
173
+ });
174
+ const instruction = getMerchantRefundInstruction({
175
+ authority,
176
+ paymentAccount,
177
+ payment,
178
+ merchantOperator,
179
+ refundAmount: refunded,
180
+ });
181
+ const signature = await runtime.sendAndConfirm(feePayer, [instruction]);
182
+ return { signature, refunded, remaining: summary.amount - refunded };
183
+ },
184
+ async respond({ payment, evidenceHash }) {
185
+ const summary = await fetchPaymentOrThrow(payment);
186
+ const { authority, feePayer, merchantOperator } = await merchantAuthority();
187
+ const paymentAccount = await derivePaymentAccountAddress({
188
+ owner: summary.payer,
189
+ mint: summary.mint,
190
+ tokenProgram: summary.tokenProgram,
191
+ });
192
+ const instruction = getMerchantRespondInstruction({
193
+ authority,
194
+ paymentAccount,
195
+ payment,
196
+ merchantOperator,
197
+ evidenceHash,
198
+ });
199
+ const signature = await runtime.sendAndConfirm(feePayer, [instruction]);
200
+ return { signature };
201
+ },
202
+ async refundSettled(params) {
203
+ const merchantSigner = requireTreasury(params.merchantSigner, "refundSettled");
204
+ const feePayer = requireTreasury(undefined, "refundSettled");
205
+ const [merchantTokenAccount, payerTokenAccount] = await Promise.all([
206
+ deriveAssociatedTokenAddress({
207
+ owner: merchantSigner.address,
208
+ mint: params.mint,
209
+ tokenProgram,
210
+ }),
211
+ deriveAssociatedTokenAddress({
212
+ owner: params.payer,
213
+ mint: params.mint,
214
+ tokenProgram,
215
+ }),
216
+ ]);
217
+ const instructions = [
218
+ await getCreateAssociatedTokenIdempotentInstructionAsync({
219
+ payer: feePayer,
220
+ owner: params.payer,
221
+ mint: params.mint,
222
+ tokenProgram,
223
+ }),
224
+ getRefundSettledInstruction({
225
+ merchant: merchantSigner,
226
+ merchantTokenAccount,
227
+ payerTokenAccount,
228
+ mint: params.mint,
229
+ tokenProgram,
230
+ amount: params.amount,
231
+ originalPayment: params.originalPayment,
232
+ reference: params.reference,
233
+ }),
234
+ ];
235
+ const signature = await runtime.sendAndConfirm(feePayer, instructions);
236
+ return { signature };
237
+ },
238
+ async addOperator(operator, options = {}) {
239
+ const treasury = requireTreasury(options.treasurySigner, "addOperator");
240
+ const instruction = await getAddMerchantOperatorInstructionAsync({
241
+ treasury,
242
+ operator,
243
+ });
244
+ const signature = await runtime.sendAndConfirm(treasury, [instruction]);
245
+ return { signature };
246
+ },
247
+ async removeOperator(operator, options = {}) {
248
+ const treasury = requireTreasury(options.treasurySigner, "removeOperator");
249
+ const instruction = await getRemoveMerchantOperatorInstructionAsync({
250
+ treasury,
251
+ operator,
252
+ });
253
+ const signature = await runtime.sendAndConfirm(treasury, [instruction]);
254
+ return { signature };
255
+ },
256
+ async getPayment(paymentOrSeeds) {
257
+ const address = typeof paymentOrSeeds === "string"
258
+ ? paymentOrSeeds
259
+ : await derivePaymentAddressFromSeeds({
260
+ owner: paymentOrSeeds.payer,
261
+ mint: paymentOrSeeds.mint,
262
+ reference: paymentOrSeeds.reference,
263
+ tokenProgram,
264
+ });
265
+ return fetchPaymentSummary(config.rpc, address);
266
+ },
267
+ recentPayments(options = {}) {
268
+ return collectEventsForAddress(config.rpc, config.merchant, options);
269
+ },
270
+ onPayment(callback, options = {}) {
271
+ if (!config.rpcSubscriptions) {
272
+ throw new ConfigurationError("rpcSubscriptions is required for onPayment; pass it to createMerchantClient.");
273
+ }
274
+ return subscribeToPaymentEvents(config.rpcSubscriptions, (event) => {
275
+ if (eventParticipants(event.event).includes(config.merchant)) {
276
+ callback(event);
277
+ }
278
+ }, { onError: options.onError });
279
+ },
280
+ };
281
+ }
282
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/merchant/client.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,kDAAkD,EAClD,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EAAE,sCAAsC,EAAE,MAAM,kDAAkD,CAAC;AAC1G,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,yCAAyC,EAAE,MAAM,qDAAqD,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,GAGpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,uBAAuB,GAGxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,MAAM,IAAI,SAAS,EACnB,YAAY,IAAI,eAAe,GAKhC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAsB,MAAM,qBAAqB,CAAC;AACzG,OAAO,EACL,2BAA2B,GAE5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AA8IrE,MAAM,UAAU,oBAAoB,CAClC,MAA4B;IAE5B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,qBAAqB,CAAC;IAClE,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GACZ,qBAAqB,IAAI,MAAM,CAAC,QAAQ;QACtC,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/C,MAAM,aAAa,GACjB,MAAM,CAAC,aAAa;QACpB,CAAC,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW;YAC1C,CAAC,CAAC,4BAA4B,EAAE;YAChC,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAErC,IAAI,kBAAkB,GAAsC,IAAI,CAAC;IACjE,SAAS,cAAc;QACrB,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,kBAAkB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,oBAAoB,GAAkC,IAAI,CAAC;IAC/D,KAAK,UAAU,gBAAgB;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,oBAAoB,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACxD,mBAAmB,CAAC;gBAClB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,KAAK,EAAE,aAAa;gBACpB,OAAO;gBACP,QAAQ;gBACR,QAAQ;gBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,KAAK,UAAU,eAAe;QAC5B,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,6BAA6B,EAAE,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC;IAC7C,IAAI,UAAU,GAA0C,IAAI,CAAC;IAC7D,IAAI,SAAS,EAAE,CAAC;QAEd,KAAK,eAAe,EAAE,CAAC;QAEvB,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,eAAe,EAAE,CAAC;QACzB,CAAC,EAAE,MAAM,CAAC,eAAe,IAAI,yBAAyB,CAAC,CAAC;QACxD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YACzE,UAA6B,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3C,CAAC;QAED,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACtD,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,eAAe,EAAE,CAAC,CAAC;YACpE,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBACnD,IACE,OAAO,QAAQ,KAAK,WAAW;oBAC/B,QAAQ,CAAC,eAAe,KAAK,SAAS,EACtC,CAAC;oBACD,KAAK,eAAe,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS,eAAe,CACtB,QAA4B,EAC5B,OAAO,GAAG,yBAAyB;QAEnC,MAAM,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,kBAAkB,CAC1B,kCAAkC,OAAO,8FAA8F,CACxI,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,KAAK,UAAU,iBAAiB;QAK9B,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO;gBACL,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,QAAQ;gBACR,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;oBACpD,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;iBAClC,CAAC;aACH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,UAAU,mBAAmB,CAAC,OAAgB;QACjD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,kBAAkB,CAC1B,WAAW,OAAO,wJAAwJ,CAC3K,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,MAAM;YACjB,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAC/C,OAAO,SAAS,CACd;gBACE,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO;gBACP,QAAQ;gBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ;gBACR,YAAY;gBACZ,aAAa;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,EACD,MAAM,CACP,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE;YACtC,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAC/C,OAAO,eAAe,CACpB;gBACE,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO;gBACP,QAAQ;gBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ;gBACR,YAAY;gBACZ,aAAa;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,EACD,QAAQ,EACR,MAAM,CACP,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,aAAa;YACjB,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;YACvC,MAAM,KAAK,CAAC,6BAA6B,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvD,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC,CAAC;YACJ,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,iBAAiB;YACrB,OAAO,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,6BAA6B,EAAE,CAAC;QACpE,CAAC;QAED,KAAK,CAAC,2BAA2B;YAC/B,OAAO,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,mBAAmB,EAAE,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;YAC9B,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;YAE1C,IAAI,QAAQ,IAAI,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,QAAQ,uBAAuB,OAAO,CAAC,MAAM,IAAI,CACnE,CAAC;YACJ,CAAC;YACD,IACE,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,QAAQ;gBACzC,QAAQ,KAAK,OAAO,CAAC,MAAM,EAC3B,CAAC;gBACD,MAAM,IAAI,kBAAkB,CAC1B,+IAA+I,CAChJ,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YAC5E,MAAM,cAAc,GAAG,MAAM,2BAA2B,CAAC;gBACvD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,4BAA4B,CAAC;gBAC/C,SAAS;gBACT,cAAc;gBACd,OAAO;gBACP,gBAAgB;gBAChB,YAAY,EAAE,QAAQ;aACvB,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QACvE,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;YACrC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;YAC5E,MAAM,cAAc,GAAG,MAAM,2BAA2B,CAAC;gBACvD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,6BAA6B,CAAC;gBAChD,SAAS;gBACT,cAAc;gBACd,OAAO;gBACP,gBAAgB;gBAChB,YAAY;aACb,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,MAAM;YACxB,MAAM,cAAc,GAAG,eAAe,CACpC,MAAM,CAAC,cAAc,EACrB,eAAe,CAChB,CAAC;YACF,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC7D,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClE,4BAA4B,CAAC;oBAC3B,KAAK,EAAE,cAAc,CAAC,OAAO;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;iBACb,CAAC;gBACF,4BAA4B,CAAC;oBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;iBACb,CAAC;aACH,CAAC,CAAC;YACH,MAAM,YAAY,GAAkB;gBAElC,MAAM,kDAAkD,CAAC;oBACvD,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;iBACb,CAAC;gBACF,2BAA2B,CAAC;oBAC1B,QAAQ,EAAE,cAAc;oBACxB,oBAAoB;oBACpB,iBAAiB;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;oBACZ,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC;aACH,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACvE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE;YACtC,MAAM,QAAQ,GAAG,eAAe,CAC9B,OAAO,CAAC,cAAc,EACtB,aAAa,CACd,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,sCAAsC,CAAC;gBAC/D,QAAQ;gBACR,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG,eAAe,CAC9B,OAAO,CAAC,cAAc,EACtB,gBAAgB,CACjB,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,yCAAyC,CAAC;gBAClE,QAAQ;gBACR,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,cAAc;YAC7B,MAAM,OAAO,GACX,OAAO,cAAc,KAAK,QAAQ;gBAChC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,MAAM,6BAA6B,CAAC;oBAClC,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,SAAS,EAAE,cAAc,CAAC,SAAS;oBACnC,YAAY;iBACb,CAAC,CAAC;YACT,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,cAAc,CAAC,OAAO,GAAG,EAAE;YACzB,OAAO,uBAAuB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QAED,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,MAAM,IAAI,kBAAkB,CAC1B,8EAA8E,CAC/E,CAAC;YACJ,CAAC;YACD,OAAO,wBAAwB,CAC7B,MAAM,CAAC,gBAAgB,EACvB,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7D,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,EACD,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type Address, type Instruction, type Signature, type TransactionSigner } from "@solana/kit";
2
+ import type { SdkRpc } from "../core/payment.js";
3
+ import type { ProviderTransport } from "../core/provider-transport.js";
4
+ import type { TransactionRuntime } from "../core/transactions.js";
5
+ import { type DeferredQueueStore, type PendingTap, type PendingTapWire } from "./deferred-store.js";
6
+ export type EnqueuePendingTapInput = Omit<PendingTap, "id" | "attempts"> & {
7
+ id?: string;
8
+ attempts?: number;
9
+ };
10
+ export interface DeferredQueueConfig {
11
+ rpc: SdkRpc;
12
+ store: DeferredQueueStore;
13
+ runtime: TransactionRuntime;
14
+ feePayer: TransactionSigner;
15
+ provider: ProviderTransport;
16
+ merchant: Address;
17
+ maxTapsPerTx?: number;
18
+ }
19
+ export interface DeferredQueue {
20
+ enqueue(tap: EnqueuePendingTapInput): Promise<string>;
21
+ flush(): Promise<Signature[]>;
22
+ flushOneBatch(): Promise<Signature | null>;
23
+ reconcileWithProviderAndChain(): Promise<{
24
+ landed: number;
25
+ restored: number;
26
+ }>;
27
+ restoreFromProvider(): Promise<number>;
28
+ }
29
+ export declare const DEFAULT_FLUSH_INTERVAL_MS: number;
30
+ export declare function rebuildBatchInstructions(taps: readonly PendingTap[], feePayer: TransactionSigner): Promise<Instruction[]>;
31
+ export declare function estimateTransactionSize(feePayer: TransactionSigner, instructions: Instruction[]): number;
32
+ export declare function packTapsForBatch(taps: readonly PendingTap[], feePayer: TransactionSigner, maxTaps?: number): Promise<PendingTap[]>;
33
+ export declare function createDeferredQueue(config: DeferredQueueConfig): DeferredQueue;
34
+ export type { PendingTapWire };
35
+ //# sourceMappingURL=deferred-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferred-queue.d.ts","sourceRoot":"","sources":["../../src/merchant/deferred-queue.ts"],"names":[],"mappings":"AAaA,OAAO,EASL,KAAK,OAAO,EAEZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AASrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,CAAC,GAAG;IACzE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAElB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtD,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE9B,aAAa,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAK3C,6BAA6B,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/E,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACxC;AAGD,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AAGxD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,SAAS,UAAU,EAAE,EAC3B,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAsCxB;AAGD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,WAAW,EAAE,GAC1B,MAAM,CAsBR;AAMD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,UAAU,EAAE,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,MAAwB,GAChC,OAAO,CAAC,UAAU,EAAE,CAAC,CAcvB;AAiBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAyK9E;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,237 @@
1
+ import { appendTransactionMessageInstructions, compileTransaction, createTransactionMessage, getBase58Decoder, getBase64EncodedWireTransaction, pipe, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/kit";
2
+ import { getSecp256r1VerifyInstruction, } from "phygital-token-sdk";
3
+ import { fetchMaybePayment } from "../generated/accounts/payment.js";
4
+ import { getTransferInstructionAsync } from "../generated/instructions/transfer.js";
5
+ import { base58ToBytes } from "../core/bytes.js";
6
+ import { ProviderHttpError } from "../core/errors.js";
7
+ import { nowSeconds } from "../core/time.js";
8
+ import { deserializePendingTap, MAX_TAPS_PER_TX, MAX_TRANSACTION_SIZE, } from "./deferred-store.js";
9
+ export const DEFAULT_FLUSH_INTERVAL_MS = 15 * 60 * 1000;
10
+ export async function rebuildBatchInstructions(taps, feePayer) {
11
+ if (taps.length === 0) {
12
+ throw new Error("rebuildBatchInstructions requires at least one tap");
13
+ }
14
+ if (taps.length > MAX_TAPS_PER_TX) {
15
+ throw new Error(`at most ${MAX_TAPS_PER_TX} taps per batch`);
16
+ }
17
+ const entries = [];
18
+ for (const tap of taps) {
19
+ entries.push(tap.credentialEntry, tap.enablerEntry);
20
+ }
21
+ const preamble = getSecp256r1VerifyInstruction(entries);
22
+ const transfers = [];
23
+ for (let i = 0; i < taps.length; i++) {
24
+ const tap = taps[i];
25
+ transfers.push(await getTransferInstructionAsync({
26
+ rentPayer: feePayer,
27
+ merchant: tap.merchant,
28
+ asset: tap.asset,
29
+ mint: tap.mint,
30
+ paymentAccount: tap.paymentAccount,
31
+ payment: tap.payment,
32
+ escrowTokenAccount: tap.escrowTokenAccount,
33
+ credentialSignedMessageIndex: 2 * i,
34
+ enablerSignedMessageIndex: 2 * i + 1,
35
+ clientDataJson: tap.clientDataJson,
36
+ amount: BigInt(tap.amount),
37
+ tapIssuedAt: tap.tapIssuedAt,
38
+ reference: base58ToBytes(tap.reference),
39
+ tokenProgram: tap.tokenProgram,
40
+ }));
41
+ }
42
+ return [preamble, ...transfers];
43
+ }
44
+ export function estimateTransactionSize(feePayer, instructions) {
45
+ const transaction = pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayerSigner(feePayer, m), (m) => setTransactionMessageLifetimeUsingBlockhash({
46
+ blockhash: getBase58Decoder().decode(crypto.getRandomValues(new Uint8Array(32))),
47
+ lastValidBlockHeight: 0n,
48
+ }, m), (m) => appendTransactionMessageInstructions(instructions, m), (m) => compileTransaction(m));
49
+ const wire = getBase64EncodedWireTransaction(transaction);
50
+ if (typeof Buffer !== "undefined") {
51
+ return Buffer.from(wire, "base64").byteLength;
52
+ }
53
+ return atob(wire).length;
54
+ }
55
+ export async function packTapsForBatch(taps, feePayer, maxTaps = MAX_TAPS_PER_TX) {
56
+ const batch = [];
57
+ for (const tap of taps) {
58
+ if (batch.length >= maxTaps)
59
+ break;
60
+ const candidate = [...batch, tap];
61
+ const instructions = await rebuildBatchInstructions(candidate, feePayer);
62
+ const size = estimateTransactionSize(feePayer, instructions);
63
+ if (size > MAX_TRANSACTION_SIZE) {
64
+ if (batch.length === 0)
65
+ return [tap];
66
+ break;
67
+ }
68
+ batch.push(tap);
69
+ }
70
+ return batch;
71
+ }
72
+ function isLikelyTransient(error) {
73
+ if (error instanceof ProviderHttpError) {
74
+ return error.status === 0 || error.status === 408 || error.status === 429 || error.status >= 500;
75
+ }
76
+ if (error instanceof TypeError)
77
+ return true;
78
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error);
79
+ return (message.includes("network") ||
80
+ message.includes("offline") ||
81
+ message.includes("fetch") ||
82
+ message.includes("timeout") ||
83
+ message.includes("aborted"));
84
+ }
85
+ export function createDeferredQueue(config) {
86
+ const maxTaps = Math.min(config.maxTapsPerTx ?? MAX_TAPS_PER_TX, MAX_TAPS_PER_TX);
87
+ async function markLandedElsewhere(tap) {
88
+ await config.store.markDone(tap.id, "reconciled-on-chain");
89
+ try {
90
+ await config.provider.acknowledgePendingTap({ reference: tap.reference });
91
+ }
92
+ catch (error) {
93
+ if (!(error instanceof ProviderHttpError))
94
+ throw error;
95
+ }
96
+ }
97
+ async function dropAlreadyOnChain(taps) {
98
+ const remaining = [];
99
+ for (const tap of taps) {
100
+ const onChain = await fetchMaybePayment(config.rpc, tap.payment);
101
+ if (onChain.exists) {
102
+ await markLandedElsewhere(tap);
103
+ }
104
+ else {
105
+ remaining.push(tap);
106
+ }
107
+ }
108
+ return remaining;
109
+ }
110
+ async function liveSorted() {
111
+ const now = nowSeconds();
112
+ const mine = (await config.store.listPending()).filter((tap) => tap.merchant === config.merchant);
113
+ const live = [];
114
+ for (const tap of mine) {
115
+ if (tap.executeBy <= now) {
116
+ const onChain = await fetchMaybePayment(config.rpc, tap.payment);
117
+ if (onChain.exists) {
118
+ await markLandedElsewhere(tap);
119
+ }
120
+ else {
121
+ await config.store.markFailed(tap.id, `executeBy ${tap.executeBy} passed at ${now}`);
122
+ }
123
+ }
124
+ else {
125
+ live.push(tap);
126
+ }
127
+ }
128
+ return live.sort((a, b) => a.executeBy - b.executeBy);
129
+ }
130
+ async function landBatch(batch) {
131
+ const instructions = await rebuildBatchInstructions(batch, config.feePayer);
132
+ const signature = await config.runtime.sendAndConfirm(config.feePayer, instructions);
133
+ for (const tap of batch) {
134
+ await config.store.markDone(tap.id, signature);
135
+ try {
136
+ await config.provider.acknowledgePendingTap({ reference: tap.reference });
137
+ }
138
+ catch (error) {
139
+ if (!(error instanceof ProviderHttpError))
140
+ throw error;
141
+ }
142
+ }
143
+ return signature;
144
+ }
145
+ async function flushOneBatch() {
146
+ const live = await dropAlreadyOnChain(await liveSorted());
147
+ if (live.length === 0)
148
+ return null;
149
+ const batch = await packTapsForBatch(live, config.feePayer, maxTaps);
150
+ if (batch.length === 0)
151
+ return null;
152
+ const stillOpen = await dropAlreadyOnChain(batch);
153
+ if (stillOpen.length === 0)
154
+ return null;
155
+ if (stillOpen.length !== batch.length) {
156
+ return flushOneBatch();
157
+ }
158
+ try {
159
+ return await landBatch(stillOpen);
160
+ }
161
+ catch (error) {
162
+ await dropAlreadyOnChain(stillOpen);
163
+ if (isLikelyTransient(error))
164
+ return null;
165
+ throw error;
166
+ }
167
+ }
168
+ async function flush() {
169
+ const signatures = [];
170
+ for (;;) {
171
+ const before = (await dropAlreadyOnChain(await liveSorted())).length;
172
+ if (before === 0)
173
+ break;
174
+ const signature = await flushOneBatch();
175
+ if (!signature)
176
+ break;
177
+ signatures.push(signature);
178
+ const after = (await dropAlreadyOnChain(await liveSorted())).length;
179
+ if (after >= before)
180
+ break;
181
+ }
182
+ return signatures;
183
+ }
184
+ async function restoreFromProvider() {
185
+ const remote = await config.provider.listPendingTaps({
186
+ merchant: config.merchant,
187
+ });
188
+ let restored = 0;
189
+ for (const wire of remote) {
190
+ const existing = await config.store.getByReference(wire.reference);
191
+ if (existing)
192
+ continue;
193
+ const tap = deserializePendingTap(wire);
194
+ const onChain = await fetchMaybePayment(config.rpc, tap.payment);
195
+ if (onChain.exists) {
196
+ try {
197
+ await config.provider.acknowledgePendingTap({ reference: tap.reference });
198
+ }
199
+ catch (error) {
200
+ if (!(error instanceof ProviderHttpError))
201
+ throw error;
202
+ }
203
+ continue;
204
+ }
205
+ await config.store.put({ ...tap, id: "", attempts: 0 });
206
+ restored += 1;
207
+ }
208
+ return restored;
209
+ }
210
+ async function reconcileWithProviderAndChain() {
211
+ const before = await config.store.listPending();
212
+ await dropAlreadyOnChain(before.filter((tap) => tap.merchant === config.merchant));
213
+ const afterDrop = await config.store.listPending();
214
+ const landed = before.length - afterDrop.length;
215
+ const restored = await restoreFromProvider();
216
+ return { landed, restored };
217
+ }
218
+ return {
219
+ async enqueue(tap) {
220
+ const id = await config.store.put({
221
+ ...tap,
222
+ id: tap.id ?? "",
223
+ attempts: tap.attempts ?? 0,
224
+ });
225
+ const live = await dropAlreadyOnChain(await liveSorted());
226
+ if (live.length >= maxTaps) {
227
+ await flushOneBatch();
228
+ }
229
+ return id;
230
+ },
231
+ flush,
232
+ flushOneBatch,
233
+ reconcileWithProviderAndChain,
234
+ restoreFromProvider,
235
+ };
236
+ }
237
+ //# sourceMappingURL=deferred-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferred-queue.js","sourceRoot":"","sources":["../../src/merchant/deferred-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { Address } from "@solana/kit";
2
+ import type { Secp256r1VerifyEntry } from "phygital-token-sdk";
3
+ export declare const MAX_SECP256R1_SIGNATURES = 8;
4
+ export declare const MAX_TAPS_PER_TX: number;
5
+ export declare const MAX_TRANSACTION_SIZE = 1232;
6
+ export interface PendingTap {
7
+ id: string;
8
+ reference: string;
9
+ executeBy: number;
10
+ enqueuedAt: number;
11
+ merchant: Address;
12
+ credentialEntry: Secp256r1VerifyEntry;
13
+ enablerEntry: Secp256r1VerifyEntry;
14
+ clientDataJson: Uint8Array;
15
+ payer: Address;
16
+ mint: Address;
17
+ tokenProgram: Address;
18
+ amount: string;
19
+ arbiter: Address;
20
+ tapIssuedAt: number;
21
+ asset: Address;
22
+ paymentAccount: Address;
23
+ payment: Address;
24
+ escrowTokenAccount: Address;
25
+ attempts: number;
26
+ }
27
+ export interface PendingTapWire {
28
+ id: string;
29
+ reference: string;
30
+ executeBy: number;
31
+ enqueuedAt: number;
32
+ merchant: Address;
33
+ credentialEntry: WireVerifyEntry;
34
+ enablerEntry: WireVerifyEntry;
35
+ clientDataJson: string;
36
+ payer: Address;
37
+ mint: Address;
38
+ tokenProgram: Address;
39
+ amount: string;
40
+ arbiter: Address;
41
+ tapIssuedAt: number;
42
+ asset: Address;
43
+ paymentAccount: Address;
44
+ payment: Address;
45
+ escrowTokenAccount: Address;
46
+ attempts: number;
47
+ }
48
+ export interface WireVerifyEntry {
49
+ publicKey: string;
50
+ signature: string;
51
+ message: string;
52
+ }
53
+ export interface DeferredQueueStore {
54
+ put(tap: PendingTap): Promise<string>;
55
+ get(id: string): Promise<PendingTap | undefined>;
56
+ getByReference(reference: string): Promise<PendingTap | undefined>;
57
+ listPending(): Promise<PendingTap[]>;
58
+ markDone(id: string, signature: string): Promise<void>;
59
+ markFailed(id: string, error: string): Promise<void>;
60
+ }
61
+ export declare function serializePendingTap(tap: PendingTap): PendingTapWire;
62
+ export declare function deserializePendingTap(wire: PendingTapWire): PendingTap;
63
+ export declare function createInMemoryDeferredStore(): DeferredQueueStore & {
64
+ items(): PendingTap[];
65
+ done(): ReadonlyMap<string, string>;
66
+ };
67
+ //# sourceMappingURL=deferred-store.d.ts.map