@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.
- package/LICENSE +13 -0
- package/README.md +17 -0
- package/dist/billing/index.d.ts +3 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +3 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/meter.d.ts +97 -0
- package/dist/billing/meter.d.ts.map +1 -0
- package/dist/billing/meter.js +109 -0
- package/dist/billing/meter.js.map +1 -0
- package/dist/billing/plans.d.ts +77 -0
- package/dist/billing/plans.d.ts.map +1 -0
- package/dist/billing/plans.js +65 -0
- package/dist/billing/plans.js.map +1 -0
- package/dist/client/buyer.d.ts +82 -0
- package/dist/client/buyer.d.ts.map +1 -0
- package/dist/client/buyer.js +168 -0
- package/dist/client/buyer.js.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -0
- package/dist/constants.d.ts +36 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -0
- package/dist/credits/amount.d.ts +7 -0
- package/dist/credits/amount.d.ts.map +1 -0
- package/dist/credits/amount.js +36 -0
- package/dist/credits/amount.js.map +1 -0
- package/dist/credits/errors.d.ts +20 -0
- package/dist/credits/errors.d.ts.map +1 -0
- package/dist/credits/errors.js +35 -0
- package/dist/credits/errors.js.map +1 -0
- package/dist/credits/index.d.ts +7 -0
- package/dist/credits/index.d.ts.map +1 -0
- package/dist/credits/index.js +6 -0
- package/dist/credits/index.js.map +1 -0
- package/dist/credits/ledger.d.ts +175 -0
- package/dist/credits/ledger.d.ts.map +1 -0
- package/dist/credits/ledger.js +705 -0
- package/dist/credits/ledger.js.map +1 -0
- package/dist/credits/store.d.ts +104 -0
- package/dist/credits/store.d.ts.map +1 -0
- package/dist/credits/store.js +420 -0
- package/dist/credits/store.js.map +1 -0
- package/dist/credits/types.d.ts +234 -0
- package/dist/credits/types.d.ts.map +1 -0
- package/dist/credits/types.js +2 -0
- package/dist/credits/types.js.map +1 -0
- package/dist/credits/webhooks.d.ts +5 -0
- package/dist/credits/webhooks.d.ts.map +1 -0
- package/dist/credits/webhooks.js +13 -0
- package/dist/credits/webhooks.js.map +1 -0
- package/dist/funding/arc-worker.d.ts +55 -0
- package/dist/funding/arc-worker.d.ts.map +1 -0
- package/dist/funding/arc-worker.js +133 -0
- package/dist/funding/arc-worker.js.map +1 -0
- package/dist/funding/arc.d.ts +38 -0
- package/dist/funding/arc.d.ts.map +1 -0
- package/dist/funding/arc.js +83 -0
- package/dist/funding/arc.js.map +1 -0
- package/dist/funding/index.d.ts +3 -0
- package/dist/funding/index.d.ts.map +1 -0
- package/dist/funding/index.js +3 -0
- package/dist/funding/index.js.map +1 -0
- package/dist/gateway/client.d.ts +51 -0
- package/dist/gateway/client.d.ts.map +1 -0
- package/dist/gateway/client.js +59 -0
- package/dist/gateway/client.js.map +1 -0
- package/dist/gateway/index.d.ts +2 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +2 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/express.d.ts +25 -0
- package/dist/middleware/express.d.ts.map +1 -0
- package/dist/middleware/express.js +61 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +4 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/next.d.ts +27 -0
- package/dist/middleware/next.d.ts.map +1 -0
- package/dist/middleware/next.js +67 -0
- package/dist/middleware/next.js.map +1 -0
- package/dist/middleware/paywall.d.ts +54 -0
- package/dist/middleware/paywall.d.ts.map +1 -0
- package/dist/middleware/paywall.js +102 -0
- package/dist/middleware/paywall.js.map +1 -0
- package/dist/pricing/index.d.ts +3 -0
- package/dist/pricing/index.d.ts.map +1 -0
- package/dist/pricing/index.js +2 -0
- package/dist/pricing/index.js.map +1 -0
- package/dist/pricing/rating.d.ts +21 -0
- package/dist/pricing/rating.d.ts.map +1 -0
- package/dist/pricing/rating.js +109 -0
- package/dist/pricing/rating.js.map +1 -0
- package/dist/receipts/amount.d.ts +8 -0
- package/dist/receipts/amount.d.ts.map +1 -0
- package/dist/receipts/amount.js +27 -0
- package/dist/receipts/amount.js.map +1 -0
- package/dist/receipts/index.d.ts +16 -0
- package/dist/receipts/index.d.ts.map +1 -0
- package/dist/receipts/index.js +15 -0
- package/dist/receipts/index.js.map +1 -0
- package/dist/receipts/invoice.d.ts +18 -0
- package/dist/receipts/invoice.d.ts.map +1 -0
- package/dist/receipts/invoice.js +112 -0
- package/dist/receipts/invoice.js.map +1 -0
- package/dist/receipts/ledger.d.ts +30 -0
- package/dist/receipts/ledger.d.ts.map +1 -0
- package/dist/receipts/ledger.js +109 -0
- package/dist/receipts/ledger.js.map +1 -0
- package/dist/receipts/memo-payment.d.ts +100 -0
- package/dist/receipts/memo-payment.d.ts.map +1 -0
- package/dist/receipts/memo-payment.js +91 -0
- package/dist/receipts/memo-payment.js.map +1 -0
- package/dist/receipts/memo.d.ts +14 -0
- package/dist/receipts/memo.d.ts.map +1 -0
- package/dist/receipts/memo.js +39 -0
- package/dist/receipts/memo.js.map +1 -0
- package/dist/receipts/persistent-ledger.d.ts +27 -0
- package/dist/receipts/persistent-ledger.d.ts.map +1 -0
- package/dist/receipts/persistent-ledger.js +111 -0
- package/dist/receipts/persistent-ledger.js.map +1 -0
- package/dist/receipts/persistent-webhook-inbox.d.ts +32 -0
- package/dist/receipts/persistent-webhook-inbox.d.ts.map +1 -0
- package/dist/receipts/persistent-webhook-inbox.js +93 -0
- package/dist/receipts/persistent-webhook-inbox.js.map +1 -0
- package/dist/receipts/proof.d.ts +80 -0
- package/dist/receipts/proof.d.ts.map +1 -0
- package/dist/receipts/proof.js +223 -0
- package/dist/receipts/proof.js.map +1 -0
- package/dist/receipts/serialization.d.ts +3 -0
- package/dist/receipts/serialization.d.ts.map +1 -0
- package/dist/receipts/serialization.js +24 -0
- package/dist/receipts/serialization.js.map +1 -0
- package/dist/receipts/store.d.ts +69 -0
- package/dist/receipts/store.d.ts.map +1 -0
- package/dist/receipts/store.js +85 -0
- package/dist/receipts/store.js.map +1 -0
- package/dist/receipts/types.d.ts +134 -0
- package/dist/receipts/types.d.ts.map +1 -0
- package/dist/receipts/types.js +5 -0
- package/dist/receipts/types.js.map +1 -0
- package/dist/receipts/watcher.d.ts +92 -0
- package/dist/receipts/watcher.d.ts.map +1 -0
- package/dist/receipts/watcher.js +323 -0
- package/dist/receipts/watcher.js.map +1 -0
- package/dist/receipts/webhook-inbox.d.ts +34 -0
- package/dist/receipts/webhook-inbox.d.ts.map +1 -0
- package/dist/receipts/webhook-inbox.js +101 -0
- package/dist/receipts/webhook-inbox.js.map +1 -0
- package/dist/receipts/webhook-route.d.ts +22 -0
- package/dist/receipts/webhook-route.d.ts.map +1 -0
- package/dist/receipts/webhook-route.js +37 -0
- package/dist/receipts/webhook-route.js.map +1 -0
- package/dist/receipts/webhooks.d.ts +20 -0
- package/dist/receipts/webhooks.d.ts.map +1 -0
- package/dist/receipts/webhooks.js +72 -0
- package/dist/receipts/webhooks.js.map +1 -0
- package/dist/types.d.ts +101 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC5D,YAAY,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE5E,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC5D,kBAAkB,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACnG,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE1C,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,iBAAiB,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE7E,mBAAmB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;IAC5E,qBAAqB,CAAC,MAAM,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAE9F,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAClE,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/C,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAEtD,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAI3D,YAAY,CAAC,MAAM,GAAE,yBAA8B,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAc/E,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAI3D,kBAAkB,CACtB,MAAM,EAAE,KAAK,MAAM,EAAE,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAOhC,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIzC,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,iBAAiB,CAAC,MAAM,GAAE,uBAA4B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAUhF,mBAAmB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAI3E,qBAAqB,CACzB,MAAM,GAAE,0BAA+B,GACtC,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAc9B,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAIjE,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI9C,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAM3E"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/receipts/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|