@resvary/sdk 0.5.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +17 -0
  3. package/dist/billing/index.d.ts +3 -0
  4. package/dist/billing/index.d.ts.map +1 -0
  5. package/dist/billing/index.js +3 -0
  6. package/dist/billing/index.js.map +1 -0
  7. package/dist/billing/meter.d.ts +97 -0
  8. package/dist/billing/meter.d.ts.map +1 -0
  9. package/dist/billing/meter.js +109 -0
  10. package/dist/billing/meter.js.map +1 -0
  11. package/dist/billing/plans.d.ts +77 -0
  12. package/dist/billing/plans.d.ts.map +1 -0
  13. package/dist/billing/plans.js +65 -0
  14. package/dist/billing/plans.js.map +1 -0
  15. package/dist/client/buyer.d.ts +82 -0
  16. package/dist/client/buyer.d.ts.map +1 -0
  17. package/dist/client/buyer.js +168 -0
  18. package/dist/client/buyer.js.map +1 -0
  19. package/dist/client/index.d.ts +2 -0
  20. package/dist/client/index.d.ts.map +1 -0
  21. package/dist/client/index.js +2 -0
  22. package/dist/client/index.js.map +1 -0
  23. package/dist/constants.d.ts +36 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +42 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/credits/amount.d.ts +7 -0
  28. package/dist/credits/amount.d.ts.map +1 -0
  29. package/dist/credits/amount.js +36 -0
  30. package/dist/credits/amount.js.map +1 -0
  31. package/dist/credits/errors.d.ts +20 -0
  32. package/dist/credits/errors.d.ts.map +1 -0
  33. package/dist/credits/errors.js +35 -0
  34. package/dist/credits/errors.js.map +1 -0
  35. package/dist/credits/index.d.ts +7 -0
  36. package/dist/credits/index.d.ts.map +1 -0
  37. package/dist/credits/index.js +6 -0
  38. package/dist/credits/index.js.map +1 -0
  39. package/dist/credits/ledger.d.ts +175 -0
  40. package/dist/credits/ledger.d.ts.map +1 -0
  41. package/dist/credits/ledger.js +705 -0
  42. package/dist/credits/ledger.js.map +1 -0
  43. package/dist/credits/store.d.ts +104 -0
  44. package/dist/credits/store.d.ts.map +1 -0
  45. package/dist/credits/store.js +420 -0
  46. package/dist/credits/store.js.map +1 -0
  47. package/dist/credits/types.d.ts +234 -0
  48. package/dist/credits/types.d.ts.map +1 -0
  49. package/dist/credits/types.js +2 -0
  50. package/dist/credits/types.js.map +1 -0
  51. package/dist/credits/webhooks.d.ts +5 -0
  52. package/dist/credits/webhooks.d.ts.map +1 -0
  53. package/dist/credits/webhooks.js +13 -0
  54. package/dist/credits/webhooks.js.map +1 -0
  55. package/dist/funding/arc-worker.d.ts +55 -0
  56. package/dist/funding/arc-worker.d.ts.map +1 -0
  57. package/dist/funding/arc-worker.js +133 -0
  58. package/dist/funding/arc-worker.js.map +1 -0
  59. package/dist/funding/arc.d.ts +38 -0
  60. package/dist/funding/arc.d.ts.map +1 -0
  61. package/dist/funding/arc.js +83 -0
  62. package/dist/funding/arc.js.map +1 -0
  63. package/dist/funding/index.d.ts +3 -0
  64. package/dist/funding/index.d.ts.map +1 -0
  65. package/dist/funding/index.js +3 -0
  66. package/dist/funding/index.js.map +1 -0
  67. package/dist/gateway/client.d.ts +51 -0
  68. package/dist/gateway/client.d.ts.map +1 -0
  69. package/dist/gateway/client.js +59 -0
  70. package/dist/gateway/client.js.map +1 -0
  71. package/dist/gateway/index.d.ts +2 -0
  72. package/dist/gateway/index.d.ts.map +1 -0
  73. package/dist/gateway/index.js +2 -0
  74. package/dist/gateway/index.js.map +1 -0
  75. package/dist/index.d.ts +21 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +20 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/middleware/express.d.ts +25 -0
  80. package/dist/middleware/express.d.ts.map +1 -0
  81. package/dist/middleware/express.js +61 -0
  82. package/dist/middleware/express.js.map +1 -0
  83. package/dist/middleware/index.d.ts +4 -0
  84. package/dist/middleware/index.d.ts.map +1 -0
  85. package/dist/middleware/index.js +4 -0
  86. package/dist/middleware/index.js.map +1 -0
  87. package/dist/middleware/next.d.ts +27 -0
  88. package/dist/middleware/next.d.ts.map +1 -0
  89. package/dist/middleware/next.js +67 -0
  90. package/dist/middleware/next.js.map +1 -0
  91. package/dist/middleware/paywall.d.ts +54 -0
  92. package/dist/middleware/paywall.d.ts.map +1 -0
  93. package/dist/middleware/paywall.js +102 -0
  94. package/dist/middleware/paywall.js.map +1 -0
  95. package/dist/pricing/index.d.ts +3 -0
  96. package/dist/pricing/index.d.ts.map +1 -0
  97. package/dist/pricing/index.js +2 -0
  98. package/dist/pricing/index.js.map +1 -0
  99. package/dist/pricing/rating.d.ts +21 -0
  100. package/dist/pricing/rating.d.ts.map +1 -0
  101. package/dist/pricing/rating.js +109 -0
  102. package/dist/pricing/rating.js.map +1 -0
  103. package/dist/receipts/amount.d.ts +8 -0
  104. package/dist/receipts/amount.d.ts.map +1 -0
  105. package/dist/receipts/amount.js +27 -0
  106. package/dist/receipts/amount.js.map +1 -0
  107. package/dist/receipts/index.d.ts +16 -0
  108. package/dist/receipts/index.d.ts.map +1 -0
  109. package/dist/receipts/index.js +15 -0
  110. package/dist/receipts/index.js.map +1 -0
  111. package/dist/receipts/invoice.d.ts +18 -0
  112. package/dist/receipts/invoice.d.ts.map +1 -0
  113. package/dist/receipts/invoice.js +112 -0
  114. package/dist/receipts/invoice.js.map +1 -0
  115. package/dist/receipts/ledger.d.ts +30 -0
  116. package/dist/receipts/ledger.d.ts.map +1 -0
  117. package/dist/receipts/ledger.js +109 -0
  118. package/dist/receipts/ledger.js.map +1 -0
  119. package/dist/receipts/memo-payment.d.ts +100 -0
  120. package/dist/receipts/memo-payment.d.ts.map +1 -0
  121. package/dist/receipts/memo-payment.js +91 -0
  122. package/dist/receipts/memo-payment.js.map +1 -0
  123. package/dist/receipts/memo.d.ts +14 -0
  124. package/dist/receipts/memo.d.ts.map +1 -0
  125. package/dist/receipts/memo.js +39 -0
  126. package/dist/receipts/memo.js.map +1 -0
  127. package/dist/receipts/persistent-ledger.d.ts +27 -0
  128. package/dist/receipts/persistent-ledger.d.ts.map +1 -0
  129. package/dist/receipts/persistent-ledger.js +111 -0
  130. package/dist/receipts/persistent-ledger.js.map +1 -0
  131. package/dist/receipts/persistent-webhook-inbox.d.ts +32 -0
  132. package/dist/receipts/persistent-webhook-inbox.d.ts.map +1 -0
  133. package/dist/receipts/persistent-webhook-inbox.js +93 -0
  134. package/dist/receipts/persistent-webhook-inbox.js.map +1 -0
  135. package/dist/receipts/proof.d.ts +80 -0
  136. package/dist/receipts/proof.d.ts.map +1 -0
  137. package/dist/receipts/proof.js +223 -0
  138. package/dist/receipts/proof.js.map +1 -0
  139. package/dist/receipts/serialization.d.ts +3 -0
  140. package/dist/receipts/serialization.d.ts.map +1 -0
  141. package/dist/receipts/serialization.js +24 -0
  142. package/dist/receipts/serialization.js.map +1 -0
  143. package/dist/receipts/store.d.ts +69 -0
  144. package/dist/receipts/store.d.ts.map +1 -0
  145. package/dist/receipts/store.js +85 -0
  146. package/dist/receipts/store.js.map +1 -0
  147. package/dist/receipts/types.d.ts +134 -0
  148. package/dist/receipts/types.d.ts.map +1 -0
  149. package/dist/receipts/types.js +5 -0
  150. package/dist/receipts/types.js.map +1 -0
  151. package/dist/receipts/watcher.d.ts +92 -0
  152. package/dist/receipts/watcher.d.ts.map +1 -0
  153. package/dist/receipts/watcher.js +323 -0
  154. package/dist/receipts/watcher.js.map +1 -0
  155. package/dist/receipts/webhook-inbox.d.ts +34 -0
  156. package/dist/receipts/webhook-inbox.d.ts.map +1 -0
  157. package/dist/receipts/webhook-inbox.js +101 -0
  158. package/dist/receipts/webhook-inbox.js.map +1 -0
  159. package/dist/receipts/webhook-route.d.ts +22 -0
  160. package/dist/receipts/webhook-route.d.ts.map +1 -0
  161. package/dist/receipts/webhook-route.js +37 -0
  162. package/dist/receipts/webhook-route.js.map +1 -0
  163. package/dist/receipts/webhooks.d.ts +20 -0
  164. package/dist/receipts/webhooks.d.ts.map +1 -0
  165. package/dist/receipts/webhooks.js +72 -0
  166. package/dist/receipts/webhooks.js.map +1 -0
  167. package/dist/types.d.ts +101 -0
  168. package/dist/types.d.ts.map +1 -0
  169. package/dist/types.js +5 -0
  170. package/dist/types.js.map +1 -0
  171. package/package.json +116 -0
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Read-only Arc Testnet proof verification for Memo-wrapped receipt payments.
3
+ */
4
+ import { createPublicClient, getAddress, http, parseAbiItem, parseEventLogs, } from 'viem';
5
+ import { ARC_TESTNET } from '../constants.js';
6
+ import { ARC_MEMO_ABI, ERC20_TRANSFER_ABI } from './memo-payment.js';
7
+ const MEMO_EVENT = parseAbiItem('event Memo(address indexed sender,address indexed target,bytes32 callDataHash,bytes32 indexed memoId,bytes memo,uint256 memoIndex)');
8
+ const DEFAULT_PROOF_LOOKBACK_BLOCKS = 5000n;
9
+ export class MemoPaymentProofError extends Error {
10
+ reason;
11
+ constructor(reason, message) {
12
+ super(message);
13
+ this.name = 'MemoPaymentProofError';
14
+ this.reason = reason;
15
+ }
16
+ }
17
+ export async function verifyMemoPaymentProof(input) {
18
+ const client = input.publicClient ?? createPublicClient({
19
+ transport: http(input.rpcUrl ?? ARC_TESTNET.rpcUrl),
20
+ });
21
+ let txReceipt;
22
+ try {
23
+ txReceipt = await client.getTransactionReceipt({ hash: input.txHash });
24
+ }
25
+ catch {
26
+ throw new MemoPaymentProofError('tx_not_found', `Transaction ${input.txHash} was not found on Arc Testnet`);
27
+ }
28
+ if (!txReceipt) {
29
+ throw new MemoPaymentProofError('tx_not_found', `Transaction ${input.txHash} was not found on Arc Testnet`);
30
+ }
31
+ return createMemoPaymentProofFromReceipt({
32
+ txHash: input.txHash,
33
+ paymentRequest: input.paymentRequest,
34
+ txReceipt,
35
+ verifiedAt: input.verifiedAt,
36
+ });
37
+ }
38
+ export async function findMemoPaymentProof(input) {
39
+ const client = (input.publicClient ?? createPublicClient({
40
+ transport: http(input.rpcUrl ?? ARC_TESTNET.rpcUrl),
41
+ }));
42
+ const { fromBlock, toBlock } = await resolveProofSearchRange(input, client);
43
+ if (fromBlock > toBlock) {
44
+ return {
45
+ status: 'pending',
46
+ fromBlock,
47
+ toBlock,
48
+ nextFromBlock: fromBlock,
49
+ scannedLogCount: 0,
50
+ };
51
+ }
52
+ const memoLogs = await getMemoProofLogs(input.paymentRequest, client, { fromBlock, toBlock });
53
+ const candidate = await verifyMemoProofCandidates(input, client, memoLogs);
54
+ if (candidate.status === 'found') {
55
+ return {
56
+ status: 'found',
57
+ proof: candidate.proof,
58
+ txHash: candidate.txHash,
59
+ fromBlock,
60
+ toBlock,
61
+ nextFromBlock: toBlock + 1n,
62
+ scannedLogCount: memoLogs.length,
63
+ };
64
+ }
65
+ if (candidate.lastError) {
66
+ throw candidate.lastError;
67
+ }
68
+ return {
69
+ status: 'pending',
70
+ fromBlock,
71
+ toBlock,
72
+ nextFromBlock: toBlock + 1n,
73
+ scannedLogCount: memoLogs.length,
74
+ };
75
+ }
76
+ async function resolveProofSearchRange(input, client) {
77
+ const confirmations = BigInt(input.confirmations ?? 1);
78
+ const latestBlock = input.toBlock ?? await client.getBlockNumber();
79
+ const toBlock = latestBlock > confirmations ? latestBlock - confirmations : 0n;
80
+ const lookbackBlocks = input.lookbackBlocks === undefined
81
+ ? DEFAULT_PROOF_LOOKBACK_BLOCKS
82
+ : BigInt(input.lookbackBlocks);
83
+ return {
84
+ fromBlock: input.fromBlock ?? defaultProofFromBlock(toBlock, lookbackBlocks),
85
+ toBlock,
86
+ };
87
+ }
88
+ function defaultProofFromBlock(toBlock, lookbackBlocks) {
89
+ return toBlock > lookbackBlocks ? toBlock - lookbackBlocks : 0n;
90
+ }
91
+ async function getMemoProofLogs(paymentRequest, client, range) {
92
+ return client.getLogs({
93
+ address: paymentRequest.memoContract,
94
+ event: MEMO_EVENT,
95
+ args: { memoId: paymentRequest.memoId },
96
+ fromBlock: range.fromBlock,
97
+ toBlock: range.toBlock,
98
+ });
99
+ }
100
+ async function verifyMemoProofCandidates(input, client, memoLogs) {
101
+ let lastError;
102
+ for (const memoLog of memoLogs) {
103
+ const result = await verifyMemoProofCandidate(input, client, memoLog);
104
+ if (result.status === 'found') {
105
+ return result;
106
+ }
107
+ lastError = result.lastError ?? lastError;
108
+ }
109
+ return { status: 'pending', lastError };
110
+ }
111
+ async function verifyMemoProofCandidate(input, client, memoLog) {
112
+ const txHash = memoLog.transactionHash;
113
+ if (!txHash) {
114
+ return { status: 'pending' };
115
+ }
116
+ try {
117
+ const proof = await verifyMemoPaymentProof({
118
+ txHash,
119
+ paymentRequest: input.paymentRequest,
120
+ publicClient: client,
121
+ verifiedAt: input.verifiedAt,
122
+ });
123
+ return { status: 'found', proof, txHash };
124
+ }
125
+ catch (error) {
126
+ if (error instanceof MemoPaymentProofError) {
127
+ return { status: 'pending', lastError: error };
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ export function createMemoPaymentProofFromReceipt(params) {
133
+ const { paymentRequest, txHash, txReceipt } = params;
134
+ if (txReceipt.status !== 'success') {
135
+ throw new MemoPaymentProofError('tx_reverted', `Transaction ${txHash} did not succeed`);
136
+ }
137
+ const memoLogs = txReceipt.logs.filter((log) => sameAddress(log.address, paymentRequest.memoContract));
138
+ if (memoLogs.length === 0) {
139
+ throw new MemoPaymentProofError('wrong_memo_contract', `Transaction ${txHash} has no logs from Memo contract ${paymentRequest.memoContract}`);
140
+ }
141
+ const parsedMemoLogs = parseEventLogs({
142
+ abi: ARC_MEMO_ABI,
143
+ eventName: 'Memo',
144
+ logs: memoLogs,
145
+ strict: false,
146
+ });
147
+ if (parsedMemoLogs.length === 0) {
148
+ throw new MemoPaymentProofError('missing_memo_event', `Transaction ${txHash} has no Memo event`);
149
+ }
150
+ const memoById = parsedMemoLogs.find((log) => {
151
+ const args = log.args;
152
+ return args.memoId?.toLowerCase() === paymentRequest.memoId.toLowerCase();
153
+ });
154
+ if (!memoById) {
155
+ throw new MemoPaymentProofError('memo_id_mismatch', `Transaction ${txHash} does not contain memoId ${paymentRequest.memoId}`);
156
+ }
157
+ const memoArgs = memoById.args;
158
+ if (!memoArgs.sender || !memoArgs.target || !memoArgs.callDataHash || !memoArgs.memoId) {
159
+ throw new MemoPaymentProofError('missing_memo_event', `Transaction ${txHash} has an incomplete Memo event`);
160
+ }
161
+ if (!sameAddress(memoArgs.target, paymentRequest.target)) {
162
+ throw new MemoPaymentProofError('target_mismatch', `Memo target ${memoArgs.target} does not match ${paymentRequest.target}`);
163
+ }
164
+ if (memoArgs.callDataHash.toLowerCase() !== paymentRequest.callDataHash.toLowerCase()) {
165
+ throw new MemoPaymentProofError('call_data_hash_mismatch', `Memo callDataHash ${memoArgs.callDataHash} does not match ${paymentRequest.callDataHash}`);
166
+ }
167
+ const transferLogs = txReceipt.logs.filter((log) => sameAddress(log.address, paymentRequest.target));
168
+ const parsedTransferLogs = parseEventLogs({
169
+ abi: ERC20_TRANSFER_ABI,
170
+ eventName: 'Transfer',
171
+ logs: transferLogs,
172
+ strict: false,
173
+ });
174
+ if (parsedTransferLogs.length === 0) {
175
+ throw new MemoPaymentProofError('missing_transfer', `Transaction ${txHash} has no USDC Transfer event`);
176
+ }
177
+ const payerTransfers = parsedTransferLogs.filter((log) => {
178
+ const args = log.args;
179
+ return args.from !== undefined && sameAddress(args.from, memoArgs.sender);
180
+ });
181
+ if (payerTransfers.length === 0) {
182
+ throw new MemoPaymentProofError('missing_transfer', `Transaction ${txHash} has no USDC Transfer from memo sender ${memoArgs.sender}`);
183
+ }
184
+ const recipientTransfers = payerTransfers.filter((log) => {
185
+ const args = log.args;
186
+ return args.to !== undefined && sameAddress(args.to, paymentRequest.payTo);
187
+ });
188
+ if (recipientTransfers.length === 0) {
189
+ throw new MemoPaymentProofError('recipient_mismatch', `Transaction ${txHash} has no USDC Transfer to ${paymentRequest.payTo}`);
190
+ }
191
+ const amountTransfer = recipientTransfers.find((log) => {
192
+ const args = log.args;
193
+ return args.value?.toString() === paymentRequest.amountUnits;
194
+ });
195
+ if (!amountTransfer) {
196
+ throw new MemoPaymentProofError('amount_mismatch', `Transaction ${txHash} has no USDC Transfer for ${paymentRequest.amountUnits} units`);
197
+ }
198
+ return {
199
+ chainId: ARC_TESTNET.chainId,
200
+ network: 'arc-testnet',
201
+ txHash,
202
+ blockNumber: txReceipt.blockNumber,
203
+ transactionIndex: txReceipt.transactionIndex ?? numberOrUndefined(memoById.transactionIndex),
204
+ logIndex: numberOrUndefined(memoById.logIndex),
205
+ memoContract: paymentRequest.memoContract,
206
+ memoIndex: memoArgs.memoIndex?.toString(),
207
+ memoId: paymentRequest.memoId,
208
+ callDataHash: paymentRequest.callDataHash,
209
+ payer: getAddress(memoArgs.sender),
210
+ payTo: getAddress(paymentRequest.payTo),
211
+ target: getAddress(paymentRequest.target),
212
+ amountUnits: paymentRequest.amountUnits,
213
+ explorerUrl: `${ARC_TESTNET.explorerUrl}/tx/${txHash}`,
214
+ verifiedAt: params.verifiedAt ?? Date.now(),
215
+ };
216
+ }
217
+ function sameAddress(left, right) {
218
+ return getAddress(left) === getAddress(right);
219
+ }
220
+ function numberOrUndefined(value) {
221
+ return typeof value === 'number' ? value : undefined;
222
+ }
223
+ //# sourceMappingURL=proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof.js","sourceRoot":"","sources":["../../src/receipts/proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function serializeReceiptStoreValue(value: unknown): string;
2
+ export declare function parseReceiptStoreValue<T>(value: string): T;
3
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/receipts/serialization.ts"],"names":[],"mappings":"AAMA,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAQ1D"}
@@ -0,0 +1,24 @@
1
+ const BIGINT_MARKER = '__resvaryBigInt';
2
+ export function serializeReceiptStoreValue(value) {
3
+ return JSON.stringify(value, (_key, item) => {
4
+ if (typeof item === 'bigint') {
5
+ return { [BIGINT_MARKER]: item.toString() };
6
+ }
7
+ return item;
8
+ });
9
+ }
10
+ export function parseReceiptStoreValue(value) {
11
+ return JSON.parse(value, (_key, item) => {
12
+ if (isSerializedBigInt(item)) {
13
+ return BigInt(item[BIGINT_MARKER]);
14
+ }
15
+ return item;
16
+ });
17
+ }
18
+ function isSerializedBigInt(value) {
19
+ return Boolean(value
20
+ && typeof value === 'object'
21
+ && BIGINT_MARKER in value
22
+ && typeof value[BIGINT_MARKER] === 'string');
23
+ }
24
+ //# sourceMappingURL=serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/receipts/serialization.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAMxC,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE;QACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAA6B,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAI,KAAa;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE;QAC/C,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAM,CAAC;AACV,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,CACZ,KAAK;WACA,OAAO,KAAK,KAAK,QAAQ;WACzB,aAAa,IAAI,KAAK;WACtB,OAAQ,KAA0B,CAAC,aAAa,CAAC,KAAK,QAAQ,CACpE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { PaymentInvoice, PaymentReceipt, InvoiceStatus, WebhookDeliveryAttempt, WebhookDeliveryStatus, WebhookEvent } from './types.js';
2
+ export interface ReceiptStoreInvoiceFilter {
3
+ status?: InvoiceStatus;
4
+ customerId?: string;
5
+ }
6
+ export interface ReceiptStoreDeliveryFilter {
7
+ eventId?: string;
8
+ status?: WebhookDeliveryStatus;
9
+ }
10
+ export interface ReceiptStoreEventFilter {
11
+ type?: WebhookEvent['type'];
12
+ }
13
+ export interface WatcherCursor {
14
+ key: string;
15
+ network: string;
16
+ nextFromBlock: bigint;
17
+ updatedAt: number;
18
+ invoiceId?: string;
19
+ memoId?: `0x${string}`;
20
+ metadata?: Record<string, unknown>;
21
+ }
22
+ export interface WatcherCursorKeyInput {
23
+ network: string;
24
+ invoiceId: string;
25
+ memoId?: `0x${string}`;
26
+ }
27
+ export interface ReceiptStore {
28
+ saveInvoice(invoice: PaymentInvoice): Promise<void>;
29
+ getInvoice(id: string): Promise<PaymentInvoice | undefined>;
30
+ listInvoices(filter?: ReceiptStoreInvoiceFilter): Promise<PaymentInvoice[]>;
31
+ saveReceipt(receipt: PaymentReceipt): Promise<void>;
32
+ getReceipt(id: string): Promise<PaymentReceipt | undefined>;
33
+ getReceiptByTxHash(txHash: `0x${string}`, invoiceId?: string): Promise<PaymentReceipt | undefined>;
34
+ listReceipts(): Promise<PaymentReceipt[]>;
35
+ saveWebhookEvent(event: WebhookEvent): Promise<void>;
36
+ listWebhookEvents(filter?: ReceiptStoreEventFilter): Promise<WebhookEvent[]>;
37
+ saveWebhookDelivery(delivery: WebhookDeliveryAttempt): Promise<void>;
38
+ getWebhookDelivery(id: string): Promise<WebhookDeliveryAttempt | undefined>;
39
+ listWebhookDeliveries(filter?: ReceiptStoreDeliveryFilter): Promise<WebhookDeliveryAttempt[]>;
40
+ getWatcherCursor(key: string): Promise<WatcherCursor | undefined>;
41
+ listWatcherCursors(): Promise<WatcherCursor[]>;
42
+ saveWatcherCursor(cursor: WatcherCursor): Promise<void>;
43
+ deleteWatcherCursor(key: string): Promise<void>;
44
+ }
45
+ export declare class InMemoryReceiptStore implements ReceiptStore {
46
+ private readonly invoices;
47
+ private readonly receipts;
48
+ private readonly events;
49
+ private readonly deliveries;
50
+ private readonly cursors;
51
+ saveInvoice(invoice: PaymentInvoice): Promise<void>;
52
+ getInvoice(id: string): Promise<PaymentInvoice | undefined>;
53
+ listInvoices(filter?: ReceiptStoreInvoiceFilter): Promise<PaymentInvoice[]>;
54
+ saveReceipt(receipt: PaymentReceipt): Promise<void>;
55
+ getReceipt(id: string): Promise<PaymentReceipt | undefined>;
56
+ getReceiptByTxHash(txHash: `0x${string}`, invoiceId?: string): Promise<PaymentReceipt | undefined>;
57
+ listReceipts(): Promise<PaymentReceipt[]>;
58
+ saveWebhookEvent(event: WebhookEvent): Promise<void>;
59
+ listWebhookEvents(filter?: ReceiptStoreEventFilter): Promise<WebhookEvent[]>;
60
+ saveWebhookDelivery(delivery: WebhookDeliveryAttempt): Promise<void>;
61
+ getWebhookDelivery(id: string): Promise<WebhookDeliveryAttempt | undefined>;
62
+ listWebhookDeliveries(filter?: ReceiptStoreDeliveryFilter): Promise<WebhookDeliveryAttempt[]>;
63
+ getWatcherCursor(key: string): Promise<WatcherCursor | undefined>;
64
+ listWatcherCursors(): Promise<WatcherCursor[]>;
65
+ saveWatcherCursor(cursor: WatcherCursor): Promise<void>;
66
+ deleteWatcherCursor(key: string): Promise<void>;
67
+ }
68
+ export declare function createWatcherCursorKey(input: WatcherCursorKeyInput): string;
69
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/receipts/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ export class InMemoryReceiptStore {
2
+ invoices = new Map();
3
+ receipts = new Map();
4
+ events = new Map();
5
+ deliveries = new Map();
6
+ cursors = new Map();
7
+ async saveInvoice(invoice) {
8
+ this.invoices.set(invoice.id, invoice);
9
+ }
10
+ async getInvoice(id) {
11
+ return this.invoices.get(id);
12
+ }
13
+ async listInvoices(filter = {}) {
14
+ return [...this.invoices.values()].filter((invoice) => {
15
+ if (filter.status && invoice.status !== filter.status) {
16
+ return false;
17
+ }
18
+ if (filter.customerId && invoice.customerId !== filter.customerId) {
19
+ return false;
20
+ }
21
+ return true;
22
+ });
23
+ }
24
+ async saveReceipt(receipt) {
25
+ this.receipts.set(receipt.id, receipt);
26
+ }
27
+ async getReceipt(id) {
28
+ return this.receipts.get(id);
29
+ }
30
+ async getReceiptByTxHash(txHash, invoiceId) {
31
+ return [...this.receipts.values()].find((receipt) => (receipt.txHash?.toLowerCase() === txHash.toLowerCase()
32
+ && (invoiceId === undefined || receipt.invoiceId === invoiceId)));
33
+ }
34
+ async listReceipts() {
35
+ return [...this.receipts.values()];
36
+ }
37
+ async saveWebhookEvent(event) {
38
+ this.events.set(event.id, event);
39
+ }
40
+ async listWebhookEvents(filter = {}) {
41
+ return [...this.events.values()].filter((event) => {
42
+ if (filter.type && event.type !== filter.type) {
43
+ return false;
44
+ }
45
+ return true;
46
+ });
47
+ }
48
+ async saveWebhookDelivery(delivery) {
49
+ this.deliveries.set(delivery.id, delivery);
50
+ }
51
+ async getWebhookDelivery(id) {
52
+ return this.deliveries.get(id);
53
+ }
54
+ async listWebhookDeliveries(filter = {}) {
55
+ return [...this.deliveries.values()].filter((delivery) => {
56
+ if (filter.eventId && delivery.eventId !== filter.eventId) {
57
+ return false;
58
+ }
59
+ if (filter.status && delivery.status !== filter.status) {
60
+ return false;
61
+ }
62
+ return true;
63
+ });
64
+ }
65
+ async getWatcherCursor(key) {
66
+ return this.cursors.get(key);
67
+ }
68
+ async listWatcherCursors() {
69
+ return [...this.cursors.values()];
70
+ }
71
+ async saveWatcherCursor(cursor) {
72
+ this.cursors.set(cursor.key, cursor);
73
+ }
74
+ async deleteWatcherCursor(key) {
75
+ this.cursors.delete(key);
76
+ }
77
+ }
78
+ export function createWatcherCursorKey(input) {
79
+ return [
80
+ input.network,
81
+ input.invoiceId,
82
+ input.memoId?.toLowerCase() ?? 'no-memo-id',
83
+ ].join(':');
84
+ }
85
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/receipts/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Types for Resvary invoice, receipt, and webhook workflows.
3
+ */
4
+ export type StablecoinSymbol = 'USDC' | 'EURC';
5
+ export type InvoiceStatus = 'open' | 'observed' | 'paid' | 'expired' | 'refunded' | 'void';
6
+ export type ReceiptStatus = 'paid' | 'refunded';
7
+ export interface CreateInvoiceInput {
8
+ /** Optional deterministic invoice id. A random id is generated when omitted. */
9
+ id?: string;
10
+ /** Human-readable stablecoin amount, e.g. "19.00". */
11
+ amount: string;
12
+ /** Stablecoin symbol. Defaults to USDC. */
13
+ currency?: StablecoinSymbol;
14
+ /** Seller wallet receiving the payment. */
15
+ payTo: `0x${string}`;
16
+ /** Arc network identifier. Defaults to arc-testnet. */
17
+ network?: string;
18
+ /** Optional customer/user id from the seller application. */
19
+ customerId?: string;
20
+ /** Optional invoice description. */
21
+ description?: string;
22
+ /** Unix timestamp in milliseconds. */
23
+ createdAt?: number;
24
+ /** Unix timestamp in milliseconds. */
25
+ expiresAt?: number;
26
+ /** Optional metadata copied into receipts and webhooks. */
27
+ metadata?: Record<string, unknown>;
28
+ }
29
+ export interface PaymentInvoice {
30
+ id: string;
31
+ status: InvoiceStatus;
32
+ amount: string;
33
+ amountUnits: string;
34
+ currency: StablecoinSymbol;
35
+ payTo: `0x${string}`;
36
+ network: string;
37
+ memo: string;
38
+ memoId?: `0x${string}`;
39
+ memoData?: `0x${string}`;
40
+ paymentUri: string;
41
+ createdAt: number;
42
+ expiresAt?: number;
43
+ customerId?: string;
44
+ description?: string;
45
+ metadata?: Record<string, unknown>;
46
+ }
47
+ export interface ObservedPayment {
48
+ txHash?: `0x${string}`;
49
+ from?: `0x${string}`;
50
+ to: `0x${string}`;
51
+ amount: string;
52
+ currency?: StablecoinSymbol;
53
+ network?: string;
54
+ memo?: string;
55
+ memoId?: `0x${string}`;
56
+ callDataHash?: `0x${string}`;
57
+ observedAt?: number;
58
+ blockNumber?: bigint;
59
+ onchainProof?: ReceiptOnchainProof;
60
+ metadata?: Record<string, unknown>;
61
+ }
62
+ export interface MemoPaymentRequest {
63
+ invoiceId: string;
64
+ memoContract: `0x${string}`;
65
+ target: `0x${string}`;
66
+ data: `0x${string}`;
67
+ txData: `0x${string}`;
68
+ memoId: `0x${string}`;
69
+ memoData: `0x${string}`;
70
+ callDataHash: `0x${string}`;
71
+ amountUnits: string;
72
+ payTo: `0x${string}`;
73
+ }
74
+ export interface PaymentMatchResult {
75
+ success: boolean;
76
+ reason?: string;
77
+ }
78
+ export interface PaymentReceipt {
79
+ id: string;
80
+ invoiceId: string;
81
+ status: ReceiptStatus;
82
+ amount: string;
83
+ amountUnits: string;
84
+ currency: StablecoinSymbol;
85
+ network: string;
86
+ payTo: `0x${string}`;
87
+ payer?: `0x${string}`;
88
+ memo: string;
89
+ txHash?: `0x${string}`;
90
+ createdAt: number;
91
+ blockNumber?: bigint;
92
+ onchainProof?: ReceiptOnchainProof;
93
+ metadata?: Record<string, unknown>;
94
+ }
95
+ export interface ReceiptOnchainProof {
96
+ chainId: number;
97
+ network: string;
98
+ txHash: `0x${string}`;
99
+ blockNumber: bigint;
100
+ transactionIndex?: number;
101
+ logIndex?: number;
102
+ memoContract: `0x${string}`;
103
+ memoIndex?: string;
104
+ memoId: `0x${string}`;
105
+ callDataHash: `0x${string}`;
106
+ payer: `0x${string}`;
107
+ payTo: `0x${string}`;
108
+ target: `0x${string}`;
109
+ amountUnits: string;
110
+ explorerUrl: string;
111
+ verifiedAt: number;
112
+ }
113
+ export type WebhookEventType = 'invoice.created' | 'invoice.observed' | 'invoice.paid' | 'invoice.expired' | 'invoice.refunded' | 'credit.granted' | 'credit.adjusted' | 'credit.reserved' | 'credit.released' | 'credit.expired' | 'usage.charged' | 'funding.intent.created' | 'funding.accepted' | 'funding.confirmed' | 'funding.settled' | 'funding.reconciliation_required' | 'funding.failed';
114
+ export interface WebhookEvent<TData = unknown> {
115
+ id: string;
116
+ type: WebhookEventType;
117
+ createdAt: number;
118
+ data: TData;
119
+ }
120
+ export type WebhookDeliveryStatus = 'verified' | 'failed';
121
+ export interface WebhookDeliveryAttempt {
122
+ id: string;
123
+ eventId: string;
124
+ eventType: WebhookEventType | 'unknown';
125
+ attempt: number;
126
+ status: WebhookDeliveryStatus;
127
+ verified: boolean;
128
+ signatureHeader: string;
129
+ receivedAt: number;
130
+ target?: string;
131
+ replayOf?: string;
132
+ error?: string;
133
+ }
134
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/receipts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for Resvary invoice, receipt, and webhook workflows.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/receipts/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}