@toon-protocol/connector 1.8.3 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/btp/btp-claim-types.d.ts +24 -2
- package/dist/btp/btp-claim-types.d.ts.map +1 -1
- package/dist/btp/btp-claim-types.js +115 -9
- package/dist/btp/btp-claim-types.js.map +1 -1
- package/dist/btp/btp-client.d.ts.map +1 -1
- package/dist/btp/btp-client.js +0 -3
- package/dist/btp/btp-client.js.map +1 -1
- package/dist/btp/inbound-claim-validator.d.ts +1 -0
- package/dist/btp/inbound-claim-validator.d.ts.map +1 -1
- package/dist/btp/inbound-claim-validator.js +29 -7
- package/dist/btp/inbound-claim-validator.js.map +1 -1
- package/dist/config/config-loader.d.ts.map +1 -1
- package/dist/config/config-loader.js +2 -0
- package/dist/config/config-loader.js.map +1 -1
- package/dist/config/types.d.ts +11 -5
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +45 -0
- package/dist/config/types.js.map +1 -1
- package/dist/core/connector-node.d.ts.map +1 -1
- package/dist/core/connector-node.js +37 -12
- package/dist/core/connector-node.js.map +1 -1
- package/dist/core/local-delivery-client.d.ts.map +1 -1
- package/dist/core/local-delivery-client.js +0 -16
- package/dist/core/local-delivery-client.js.map +1 -1
- package/dist/core/packet-handler.d.ts.map +1 -1
- package/dist/core/packet-handler.js +15 -54
- package/dist/core/packet-handler.js.map +1 -1
- package/dist/core/payment-handler.d.ts +0 -2
- package/dist/core/payment-handler.d.ts.map +1 -1
- package/dist/core/payment-handler.js +0 -11
- package/dist/core/payment-handler.js.map +1 -1
- package/dist/http/ilp-send-handler.d.ts +0 -4
- package/dist/http/ilp-send-handler.d.ts.map +1 -1
- package/dist/http/ilp-send-handler.js +0 -13
- package/dist/http/ilp-send-handler.js.map +1 -1
- package/dist/lib.d.ts +3 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +1 -3
- package/dist/lib.js.map +1 -1
- package/dist/settlement/channel-manager.d.ts +3 -2
- package/dist/settlement/channel-manager.d.ts.map +1 -1
- package/dist/settlement/channel-manager.js +18 -6
- package/dist/settlement/channel-manager.js.map +1 -1
- package/dist/settlement/claim-receiver.d.ts +12 -3
- package/dist/settlement/claim-receiver.d.ts.map +1 -1
- package/dist/settlement/claim-receiver.js +407 -117
- package/dist/settlement/claim-receiver.js.map +1 -1
- package/dist/settlement/claim-sender.d.ts +4 -2
- package/dist/settlement/claim-sender.d.ts.map +1 -1
- package/dist/settlement/claim-sender.js +38 -0
- package/dist/settlement/claim-sender.js.map +1 -1
- package/dist/settlement/mina-payment-channel-sdk.d.ts +73 -0
- package/dist/settlement/mina-payment-channel-sdk.d.ts.map +1 -0
- package/dist/settlement/mina-payment-channel-sdk.js +538 -0
- package/dist/settlement/mina-payment-channel-sdk.js.map +1 -0
- package/dist/settlement/per-packet-claim-service.d.ts +7 -6
- package/dist/settlement/per-packet-claim-service.d.ts.map +1 -1
- package/dist/settlement/per-packet-claim-service.js +168 -33
- package/dist/settlement/per-packet-claim-service.js.map +1 -1
- package/dist/settlement/privacy/index.d.ts +3 -0
- package/dist/settlement/privacy/index.d.ts.map +1 -0
- package/dist/settlement/privacy/index.js +11 -0
- package/dist/settlement/privacy/index.js.map +1 -0
- package/dist/settlement/privacy/nip59-claim-wrapper.d.ts +50 -0
- package/dist/settlement/privacy/nip59-claim-wrapper.d.ts.map +1 -0
- package/dist/settlement/privacy/nip59-claim-wrapper.js +253 -0
- package/dist/settlement/privacy/nip59-claim-wrapper.js.map +1 -0
- package/dist/settlement/provider/chain-provider-registry.d.ts +20 -0
- package/dist/settlement/provider/chain-provider-registry.d.ts.map +1 -0
- package/dist/settlement/provider/chain-provider-registry.js +53 -0
- package/dist/settlement/provider/chain-provider-registry.js.map +1 -0
- package/dist/settlement/provider/evm-payment-channel-provider.d.ts +31 -0
- package/dist/settlement/provider/evm-payment-channel-provider.d.ts.map +1 -0
- package/dist/settlement/provider/evm-payment-channel-provider.js +207 -0
- package/dist/settlement/provider/evm-payment-channel-provider.js.map +1 -0
- package/dist/settlement/provider/index.d.ts +6 -0
- package/dist/settlement/provider/index.d.ts.map +1 -0
- package/dist/settlement/provider/index.js +16 -0
- package/dist/settlement/provider/index.js.map +1 -0
- package/dist/settlement/provider/mina-payment-channel-provider.d.ts +43 -0
- package/dist/settlement/provider/mina-payment-channel-provider.d.ts.map +1 -0
- package/dist/settlement/provider/mina-payment-channel-provider.js +330 -0
- package/dist/settlement/provider/mina-payment-channel-provider.js.map +1 -0
- package/dist/settlement/provider/payment-channel-provider.d.ts +79 -0
- package/dist/settlement/provider/payment-channel-provider.d.ts.map +1 -0
- package/dist/settlement/provider/payment-channel-provider.js +3 -0
- package/dist/settlement/provider/payment-channel-provider.js.map +1 -0
- package/dist/settlement/provider/solana-payment-channel-provider.d.ts +38 -0
- package/dist/settlement/provider/solana-payment-channel-provider.d.ts.map +1 -0
- package/dist/settlement/provider/solana-payment-channel-provider.js +262 -0
- package/dist/settlement/provider/solana-payment-channel-provider.js.map +1 -0
- package/dist/settlement/settlement-executor.d.ts +11 -7
- package/dist/settlement/settlement-executor.d.ts.map +1 -1
- package/dist/settlement/settlement-executor.js +74 -65
- package/dist/settlement/settlement-executor.js.map +1 -1
- package/dist/settlement/settlement-monitor.d.ts.map +1 -1
- package/dist/settlement/settlement-monitor.js.map +1 -1
- package/dist/settlement/solana-payment-channel-sdk.d.ts +75 -0
- package/dist/settlement/solana-payment-channel-sdk.d.ts.map +1 -0
- package/dist/settlement/solana-payment-channel-sdk.js +600 -0
- package/dist/settlement/solana-payment-channel-sdk.js.map +1 -0
- package/dist/settlement/types.d.ts +1 -1
- package/dist/settlement/types.d.ts.map +1 -1
- package/dist/settlement/types.js.map +1 -1
- package/package.json +12 -1
|
@@ -2,21 +2,27 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PerPacketClaimService = void 0;
|
|
4
4
|
const btp_claim_types_1 = require("../btp/btp-claim-types");
|
|
5
|
+
const evm_payment_channel_provider_1 = require("./provider/evm-payment-channel-provider");
|
|
6
|
+
const solana_payment_channel_provider_1 = require("./provider/solana-payment-channel-provider");
|
|
7
|
+
const mina_payment_channel_provider_1 = require("./provider/mina-payment-channel-provider");
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
5
9
|
class PerPacketClaimService {
|
|
6
|
-
|
|
10
|
+
_registry;
|
|
7
11
|
channelManager;
|
|
8
12
|
db;
|
|
9
13
|
nodeId;
|
|
14
|
+
peerIdToChainMap;
|
|
10
15
|
logger;
|
|
11
16
|
cumulativeTransferred = new Map();
|
|
12
17
|
currentNonce = new Map();
|
|
13
18
|
channelClaimCache = new Map();
|
|
14
19
|
latestClaim = new Map();
|
|
15
|
-
constructor(
|
|
16
|
-
this.
|
|
20
|
+
constructor(_registry, channelManager, db, logger, nodeId, peerIdToChainMap) {
|
|
21
|
+
this._registry = _registry;
|
|
17
22
|
this.channelManager = channelManager;
|
|
18
23
|
this.db = db;
|
|
19
24
|
this.nodeId = nodeId;
|
|
25
|
+
this.peerIdToChainMap = peerIdToChainMap;
|
|
20
26
|
this.logger = logger.child({ component: 'per-packet-claim-service' });
|
|
21
27
|
this.recoverFromDb();
|
|
22
28
|
}
|
|
@@ -37,28 +43,93 @@ class PerPacketClaimService {
|
|
|
37
43
|
this.cumulativeTransferred.set(channelId, newCumulative);
|
|
38
44
|
const prevNonce = this.currentNonce.get(channelId) ?? 0;
|
|
39
45
|
const newNonce = prevNonce + 1;
|
|
46
|
+
if (!Number.isSafeInteger(newNonce)) {
|
|
47
|
+
this.logger.error({ channelId, prevNonce }, 'Nonce overflow: channel nonce exceeded MAX_SAFE_INTEGER, refusing to generate claim');
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
40
50
|
this.currentNonce.set(channelId, newNonce);
|
|
41
51
|
const locksRoot = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
42
|
-
const signature = await
|
|
43
|
-
const messageId = `evm-${channelId.substring(0, 8)}-${newNonce}-${Date.now()}`;
|
|
44
|
-
const timestamp = new Date().toISOString();
|
|
45
|
-
const claimMessage = {
|
|
46
|
-
version: '1.0',
|
|
47
|
-
blockchain: 'evm',
|
|
48
|
-
messageId,
|
|
49
|
-
timestamp,
|
|
50
|
-
senderId: this.nodeId,
|
|
52
|
+
const signature = await ctx.provider.signBalanceProof({
|
|
51
53
|
channelId,
|
|
52
54
|
nonce: newNonce,
|
|
53
55
|
transferredAmount: newCumulative.toString(),
|
|
54
56
|
lockedAmount: '0',
|
|
55
57
|
locksRoot,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
});
|
|
59
|
+
const messageId = `${ctx.blockchain}-${channelId.substring(0, 8)}-${newNonce}-${Date.now()}`;
|
|
60
|
+
const timestamp = new Date().toISOString();
|
|
61
|
+
let claimMessage;
|
|
62
|
+
if (ctx.blockchain === 'evm') {
|
|
63
|
+
if (!ctx.signerAddress) {
|
|
64
|
+
throw new Error(`EVM claim construction requires signerAddress but it was not populated for channel ${channelId}`);
|
|
65
|
+
}
|
|
66
|
+
const evmClaim = {
|
|
67
|
+
version: '1.0',
|
|
68
|
+
blockchain: 'evm',
|
|
69
|
+
messageId,
|
|
70
|
+
timestamp,
|
|
71
|
+
senderId: this.nodeId,
|
|
72
|
+
channelId,
|
|
73
|
+
nonce: newNonce,
|
|
74
|
+
transferredAmount: newCumulative.toString(),
|
|
75
|
+
lockedAmount: '0',
|
|
76
|
+
locksRoot,
|
|
77
|
+
signature,
|
|
78
|
+
signerAddress: ctx.signerAddress,
|
|
79
|
+
chainId: ctx.chainId,
|
|
80
|
+
tokenNetworkAddress: ctx.tokenNetworkAddress,
|
|
81
|
+
tokenAddress: ctx.tokenAddress,
|
|
82
|
+
};
|
|
83
|
+
claimMessage = evmClaim;
|
|
84
|
+
}
|
|
85
|
+
else if (ctx.blockchain === 'solana') {
|
|
86
|
+
if (!ctx.programId || !ctx.channelAccount || !ctx.signerPublicKey) {
|
|
87
|
+
throw new Error(`Solana claim construction requires programId, channelAccount, and signerPublicKey ` +
|
|
88
|
+
`but they were not populated for channel ${channelId}`);
|
|
89
|
+
}
|
|
90
|
+
const solanaClaim = {
|
|
91
|
+
version: '1.0',
|
|
92
|
+
blockchain: 'solana',
|
|
93
|
+
messageId,
|
|
94
|
+
timestamp,
|
|
95
|
+
senderId: this.nodeId,
|
|
96
|
+
programId: ctx.programId,
|
|
97
|
+
channelAccount: ctx.channelAccount,
|
|
98
|
+
nonce: newNonce,
|
|
99
|
+
transferredAmount: newCumulative.toString(),
|
|
100
|
+
signature,
|
|
101
|
+
signerPublicKey: ctx.signerPublicKey,
|
|
102
|
+
...(ctx.cluster !== undefined && { cluster: ctx.cluster }),
|
|
103
|
+
};
|
|
104
|
+
claimMessage = solanaClaim;
|
|
105
|
+
}
|
|
106
|
+
else if (ctx.blockchain === 'mina') {
|
|
107
|
+
if (!ctx.zkAppAddress || !ctx.minaTokenId) {
|
|
108
|
+
throw new Error(`Mina claim construction requires zkAppAddress and minaTokenId ` +
|
|
109
|
+
`but they were not populated for channel ${channelId}`);
|
|
110
|
+
}
|
|
111
|
+
if (!ctx.minaSalt) {
|
|
112
|
+
ctx.minaSalt = (0, crypto_1.randomBytes)(16).toString('hex');
|
|
113
|
+
}
|
|
114
|
+
const minaClaim = {
|
|
115
|
+
version: '1.0',
|
|
116
|
+
blockchain: 'mina',
|
|
117
|
+
messageId,
|
|
118
|
+
timestamp,
|
|
119
|
+
senderId: this.nodeId,
|
|
120
|
+
zkAppAddress: ctx.zkAppAddress,
|
|
121
|
+
tokenId: ctx.minaTokenId,
|
|
122
|
+
balanceCommitment: newCumulative.toString(),
|
|
123
|
+
nonce: newNonce,
|
|
124
|
+
proof: signature,
|
|
125
|
+
salt: ctx.minaSalt,
|
|
126
|
+
...(ctx.minaNetwork !== undefined && { network: ctx.minaNetwork }),
|
|
127
|
+
};
|
|
128
|
+
claimMessage = minaClaim;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
throw new Error(`Claim construction not implemented for blockchain: ${ctx.blockchain}`);
|
|
132
|
+
}
|
|
62
133
|
this.latestClaim.set(channelId, claimMessage);
|
|
63
134
|
this.persistClaim(toPeerId, claimMessage);
|
|
64
135
|
const data = Buffer.from(JSON.stringify(claimMessage), 'utf8');
|
|
@@ -72,6 +143,7 @@ class PerPacketClaimService {
|
|
|
72
143
|
nonce: newNonce,
|
|
73
144
|
cumulative: newCumulative.toString(),
|
|
74
145
|
peerId: toPeerId,
|
|
146
|
+
blockchain: ctx.blockchain,
|
|
75
147
|
}, 'Generated per-packet claim');
|
|
76
148
|
return { protocolData, claimMessage };
|
|
77
149
|
}
|
|
@@ -93,7 +165,8 @@ class PerPacketClaimService {
|
|
|
93
165
|
let metadata = this.channelManager.getChannelForPeer(peerId, tokenId);
|
|
94
166
|
if (!metadata) {
|
|
95
167
|
try {
|
|
96
|
-
|
|
168
|
+
const peerChain = this.peerIdToChainMap?.get(peerId);
|
|
169
|
+
await this.channelManager.ensureChannelExists(peerId, tokenId, peerChain ? { chain: peerChain } : undefined);
|
|
97
170
|
metadata = this.channelManager.getChannelForPeer(peerId, tokenId);
|
|
98
171
|
}
|
|
99
172
|
catch (error) {
|
|
@@ -103,18 +176,49 @@ class PerPacketClaimService {
|
|
|
103
176
|
return null;
|
|
104
177
|
}
|
|
105
178
|
}
|
|
179
|
+
const provider = this._registry.getProviderForPeer({
|
|
180
|
+
peerId,
|
|
181
|
+
chain: metadata.chain,
|
|
182
|
+
});
|
|
183
|
+
if (!provider) {
|
|
184
|
+
this.logger.warn({ peerId, tokenId, chain: metadata.chain }, 'No provider found for peer chain');
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
106
187
|
try {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
188
|
+
let evmContext;
|
|
189
|
+
if (provider instanceof evm_payment_channel_provider_1.EVMPaymentChannelProvider) {
|
|
190
|
+
evmContext = await provider.getSigningContext();
|
|
191
|
+
}
|
|
192
|
+
let solanaContext;
|
|
193
|
+
if (provider instanceof solana_payment_channel_provider_1.SolanaPaymentChannelProvider) {
|
|
194
|
+
solanaContext = provider.getSolanaContext();
|
|
195
|
+
}
|
|
196
|
+
let minaContext;
|
|
197
|
+
if (provider instanceof mina_payment_channel_provider_1.MinaPaymentChannelProvider) {
|
|
198
|
+
minaContext = await provider.getMinaContext();
|
|
199
|
+
}
|
|
112
200
|
return {
|
|
113
201
|
channelId: metadata.channelId,
|
|
114
|
-
|
|
115
|
-
|
|
202
|
+
provider,
|
|
203
|
+
blockchain: provider.chainType,
|
|
116
204
|
tokenAddress: metadata.tokenAddress,
|
|
117
|
-
|
|
205
|
+
...(evmContext && {
|
|
206
|
+
chainId: evmContext.chainId,
|
|
207
|
+
tokenNetworkAddress: evmContext.tokenNetworkAddress,
|
|
208
|
+
signerAddress: evmContext.signerAddress,
|
|
209
|
+
}),
|
|
210
|
+
...(solanaContext && {
|
|
211
|
+
programId: solanaContext.programId,
|
|
212
|
+
channelAccount: metadata.channelId,
|
|
213
|
+
signerPublicKey: solanaContext.signerAddress,
|
|
214
|
+
cluster: solanaContext.cluster,
|
|
215
|
+
tokenMint: solanaContext.tokenMint,
|
|
216
|
+
}),
|
|
217
|
+
...(minaContext && {
|
|
218
|
+
zkAppAddress: minaContext.zkAppAddress,
|
|
219
|
+
minaTokenId: minaContext.tokenId,
|
|
220
|
+
minaNetwork: minaContext.network,
|
|
221
|
+
}),
|
|
118
222
|
};
|
|
119
223
|
}
|
|
120
224
|
catch (error) {
|
|
@@ -127,19 +231,50 @@ class PerPacketClaimService {
|
|
|
127
231
|
const rows = this.db
|
|
128
232
|
.prepare(`
|
|
129
233
|
SELECT claim_data FROM sent_claims
|
|
130
|
-
WHERE blockchain = 'evm'
|
|
131
234
|
ORDER BY sent_at DESC
|
|
235
|
+
LIMIT 1000
|
|
132
236
|
`)
|
|
133
237
|
.all();
|
|
134
238
|
const recoveredChannels = new Set();
|
|
135
239
|
for (const row of rows) {
|
|
136
240
|
try {
|
|
137
241
|
const claim = JSON.parse(row.claim_data);
|
|
138
|
-
if (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
242
|
+
if ((0, btp_claim_types_1.isEVMClaim)(claim)) {
|
|
243
|
+
if (typeof claim.channelId !== 'string' ||
|
|
244
|
+
typeof claim.nonce !== 'number' ||
|
|
245
|
+
typeof claim.transferredAmount !== 'string') {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (!recoveredChannels.has(claim.channelId)) {
|
|
249
|
+
recoveredChannels.add(claim.channelId);
|
|
250
|
+
this.currentNonce.set(claim.channelId, claim.nonce);
|
|
251
|
+
this.cumulativeTransferred.set(claim.channelId, BigInt(claim.transferredAmount));
|
|
252
|
+
this.latestClaim.set(claim.channelId, claim);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if ((0, btp_claim_types_1.isSolanaClaim)(claim)) {
|
|
256
|
+
if (typeof claim.channelAccount !== 'string' ||
|
|
257
|
+
typeof claim.nonce !== 'number' ||
|
|
258
|
+
typeof claim.transferredAmount !== 'string') {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (!recoveredChannels.has(claim.channelAccount)) {
|
|
262
|
+
recoveredChannels.add(claim.channelAccount);
|
|
263
|
+
this.currentNonce.set(claim.channelAccount, claim.nonce);
|
|
264
|
+
this.cumulativeTransferred.set(claim.channelAccount, BigInt(claim.transferredAmount));
|
|
265
|
+
this.latestClaim.set(claim.channelAccount, claim);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else if ((0, btp_claim_types_1.isMinaClaim)(claim)) {
|
|
269
|
+
if (typeof claim.zkAppAddress !== 'string' || typeof claim.nonce !== 'number') {
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
if (!recoveredChannels.has(claim.zkAppAddress)) {
|
|
273
|
+
recoveredChannels.add(claim.zkAppAddress);
|
|
274
|
+
this.currentNonce.set(claim.zkAppAddress, claim.nonce);
|
|
275
|
+
this.cumulativeTransferred.set(claim.zkAppAddress, BigInt(0));
|
|
276
|
+
this.latestClaim.set(claim.zkAppAddress, claim);
|
|
277
|
+
}
|
|
143
278
|
}
|
|
144
279
|
}
|
|
145
280
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"per-packet-claim-service.js","sourceRoot":"","sources":["../../src/settlement/per-packet-claim-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"per-packet-claim-service.js","sourceRoot":"","sources":["../../src/settlement/per-packet-claim-service.ts"],"names":[],"mappings":";;;AA2BA,4DASgC;AAChC,0FAAoF;AACpF,gGAA0F;AAC1F,4FAAsF;AACtF,mCAAqC;AAmDrC,MAAa,qBAAqB;IAQb;IACA;IACA;IAEA;IACA;IAZF,MAAM,CAAS;IACf,qBAAqB,GAAwB,IAAI,GAAG,EAAE,CAAC;IACvD,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC9C,iBAAiB,GAAqC,IAAI,GAAG,EAAE,CAAC;IAChE,WAAW,GAAiC,IAAI,GAAG,EAAE,CAAC;IAEvE,YACmB,SAAgC,EAChC,cAA8B,EAC9B,EAAY,EAC7B,MAAc,EACG,MAAc,EACd,gBAAsC;QALtC,cAAS,GAAT,SAAS,CAAuB;QAChC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,OAAE,GAAF,EAAE,CAAU;QAEZ,WAAM,GAAN,MAAM,CAAQ;QACd,qBAAgB,GAAhB,gBAAgB,CAAsB;QAEvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAaD,KAAK,CAAC,sBAAsB,CAC1B,QAAgB,EAChB,OAAe,EACf,MAAc;QAGd,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YACd,CAAC;YACD,GAAG,GAAG,QAAQ,CAAC;YACf,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;QAG1B,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,aAAa,GAAG,cAAc,GAAG,MAAM,CAAC;QAC9C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAEzD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;QAK/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,SAAS,EAAE,SAAS,EAAE,EACxB,qFAAqF,CACtF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAK3C,MAAM,SAAS,GAAG,oEAAoE,CAAC;QACvF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACpD,SAAS;YACT,KAAK,EAAE,QAAQ;YACf,iBAAiB,EAAE,aAAa,CAAC,QAAQ,EAAE;YAC3C,YAAY,EAAE,GAAG;YACjB,SAAS;SACV,CAAC,CAAC;QAGH,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7F,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,YAA6B,CAAC;QAElC,IAAI,GAAG,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAE7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,sFAAsF,SAAS,EAAE,CAClG,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAoB;gBAChC,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,KAAK;gBACjB,SAAS;gBACT,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,SAAS;gBACT,KAAK,EAAE,QAAQ;gBACf,iBAAiB,EAAE,aAAa,CAAC,QAAQ,EAAE;gBAC3C,YAAY,EAAE,GAAG;gBACjB,SAAS;gBACT,SAAS;gBACT,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;gBAC5C,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B,CAAC;YACF,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAEvC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CACb,oFAAoF;oBAClF,2CAA2C,SAAS,EAAE,CACzD,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAuB;gBACtC,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,QAAQ;gBACpB,SAAS;gBACT,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,KAAK,EAAE,QAAQ;gBACf,iBAAiB,EAAE,aAAa,CAAC,QAAQ,EAAE;gBAC3C,SAAS;gBACT,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;aAC3D,CAAC;YACF,YAAY,GAAG,WAAW,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YAErC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,gEAAgE;oBAC9D,2CAA2C,SAAS,EAAE,CACzD,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAClB,GAAG,CAAC,QAAQ,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,SAAS,GAAqB;gBAClC,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,MAAM;gBAClB,SAAS;gBACT,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,WAAW;gBAIxB,iBAAiB,EAAE,aAAa,CAAC,QAAQ,EAAE;gBAC3C,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;aACnE,CAAC;YACF,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;aAAM,CAAC;YAEN,MAAM,IAAI,KAAK,CAAC,sDAAsD,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QAGD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAG9C,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAG1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAoB;YACpC,YAAY,EAAE,oCAAkB,CAAC,IAAI;YACrC,WAAW,EAAE,oCAAkB,CAAC,YAAY;YAC5C,IAAI;SACL,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;YACE,SAAS;YACT,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,aAAa,CAAC,QAAQ,EAAE;YACpC,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,EACD,4BAA4B,CAC7B,CAAC;QAEF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IACxC,CAAC;IASD,cAAc,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACjD,CAAC;IAQD,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAGnC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,+CAA+C,CAAC,CAAC;IACnF,CAAC;IAOO,KAAK,CAAC,mBAAmB,CAC/B,MAAc,EACd,OAAe;QAEf,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEd,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACrD,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAC3D,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,mCAAmC,CACpC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;YACjD,MAAM;YACN,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAC1C,kCAAkC,CACnC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YAEH,IAAI,UAES,CAAC;YACd,IAAI,QAAQ,YAAY,wDAAyB,EAAE,CAAC;gBAClD,UAAU,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YAClD,CAAC;YAGD,IAAI,aAES,CAAC;YACd,IAAI,QAAQ,YAAY,8DAA4B,EAAE,CAAC;gBACrD,aAAa,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC9C,CAAC;YAGD,IAAI,WAES,CAAC;YACd,IAAI,QAAQ,YAAY,0DAA0B,EAAE,CAAC;gBACnD,WAAW,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;YAChD,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ;gBACR,UAAU,EAAE,QAAQ,CAAC,SAAS;gBAC9B,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,GAAG,CAAC,UAAU,IAAI;oBAChB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,mBAAmB,EAAE,UAAU,CAAC,mBAAmB;oBACnD,aAAa,EAAE,UAAU,CAAC,aAAa;iBACxC,CAAC;gBACF,GAAG,CAAC,aAAa,IAAI;oBACnB,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,cAAc,EAAE,QAAQ,CAAC,SAAS;oBAClC,eAAe,EAAE,aAAa,CAAC,aAAa;oBAC5C,OAAO,EAAE,aAAa,CAAC,OAAO;oBAC9B,SAAS,EAAE,aAAa,CAAC,SAAS;iBACnC,CAAC;gBACF,GAAG,CAAC,WAAW,IAAI;oBACjB,YAAY,EAAE,WAAW,CAAC,YAAY;oBACtC,WAAW,EAAE,WAAW,CAAC,OAAO;oBAChC,WAAW,EAAE,WAAW,CAAC,OAAO;iBAEjC,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,uCAAuC,CACxC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAMO,aAAa;QACnB,IAAI,CAAC;YAKH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;iBACjB,OAAO,CACN;;;;SAID,CACA;iBACA,GAAG,EAAmC,CAAC;YAE1C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;YAE5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAoB,CAAC;oBAG5D,IAAI,IAAA,4BAAU,EAAC,KAAK,CAAC,EAAE,CAAC;wBAEtB,IACE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;4BACnC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;4BAC/B,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,EAC3C,CAAC;4BACD,SAAS;wBACX,CAAC;wBAED,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC5C,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;4BACvC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;4BACpD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;4BACjF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBAC/C,CAAC;oBACH,CAAC;yBAEI,IAAI,IAAA,+BAAa,EAAC,KAAK,CAAC,EAAE,CAAC;wBAC9B,IACE,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;4BACxC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;4BAC/B,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,EAC3C,CAAC;4BACD,SAAS;wBACX,CAAC;wBACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;4BACjD,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;4BAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;4BACzD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;4BACtF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;wBACpD,CAAC;oBACH,CAAC;yBAII,IAAI,IAAA,6BAAW,EAAC,KAAK,CAAC,EAAE,CAAC;wBAC5B,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;4BAC9E,SAAS;wBACX,CAAC;wBACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;4BAC/C,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;4BACvD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;wBAClD,CAAC;oBACH,CAAC;gBAGH,CAAC;gBAAC,MAAM,CAAC;gBAET,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,YAAY,EAAE,iBAAiB,CAAC,IAAI,EAAE,EACxC,gDAAgD,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACjE,6DAA6D,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAKO,YAAY,CAAC,MAAc,EAAE,KAAsB;QACzD,IAAI,CAAC;YACH,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;;;SAID,CACA;iBACA,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;gBACjF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,sCAAsC,CAAC,CAAC;YAC3F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EACrC,qCAAqC,CACtC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AArcD,sDAqcC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { NIP59ClaimWrapper, NIP59TransportWrapper, NIP59WrapError, BTP_WRAPPED_CLAIM_PROTOCOL, serializeWrappedClaim, deserializeWrappedClaim, } from './nip59-claim-wrapper';
|
|
2
|
+
export type { WrappedClaim, NIP59ClaimWrapperOptions } from './nip59-claim-wrapper';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/settlement/privacy/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deserializeWrappedClaim = exports.serializeWrappedClaim = exports.BTP_WRAPPED_CLAIM_PROTOCOL = exports.NIP59WrapError = exports.NIP59TransportWrapper = exports.NIP59ClaimWrapper = void 0;
|
|
4
|
+
var nip59_claim_wrapper_1 = require("./nip59-claim-wrapper");
|
|
5
|
+
Object.defineProperty(exports, "NIP59ClaimWrapper", { enumerable: true, get: function () { return nip59_claim_wrapper_1.NIP59ClaimWrapper; } });
|
|
6
|
+
Object.defineProperty(exports, "NIP59TransportWrapper", { enumerable: true, get: function () { return nip59_claim_wrapper_1.NIP59TransportWrapper; } });
|
|
7
|
+
Object.defineProperty(exports, "NIP59WrapError", { enumerable: true, get: function () { return nip59_claim_wrapper_1.NIP59WrapError; } });
|
|
8
|
+
Object.defineProperty(exports, "BTP_WRAPPED_CLAIM_PROTOCOL", { enumerable: true, get: function () { return nip59_claim_wrapper_1.BTP_WRAPPED_CLAIM_PROTOCOL; } });
|
|
9
|
+
Object.defineProperty(exports, "serializeWrappedClaim", { enumerable: true, get: function () { return nip59_claim_wrapper_1.serializeWrappedClaim; } });
|
|
10
|
+
Object.defineProperty(exports, "deserializeWrappedClaim", { enumerable: true, get: function () { return nip59_claim_wrapper_1.deserializeWrappedClaim; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/settlement/privacy/index.ts"],"names":[],"mappings":";;;AASA,6DAO+B;AAN7B,wHAAA,iBAAiB,OAAA;AACjB,4HAAA,qBAAqB,OAAA;AACrB,qHAAA,cAAc,OAAA;AACd,iIAAA,0BAA0B,OAAA;AAC1B,4HAAA,qBAAqB,OAAA;AACrB,8HAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { BTPClaimMessage } from '../../btp/btp-claim-types';
|
|
2
|
+
export interface WrappedClaim {
|
|
3
|
+
ephemeralPublicKey: string;
|
|
4
|
+
encryptedPayload: string;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
version: '1.0';
|
|
7
|
+
}
|
|
8
|
+
export declare const BTP_WRAPPED_CLAIM_PROTOCOL: {
|
|
9
|
+
readonly NAME: "claim-wrapped";
|
|
10
|
+
readonly CONTENT_TYPE: 0;
|
|
11
|
+
readonly VERSION: "1.0";
|
|
12
|
+
};
|
|
13
|
+
export declare class NIP59WrapError extends Error {
|
|
14
|
+
readonly name = "NIP59WrapError";
|
|
15
|
+
constructor(message: string, options?: {
|
|
16
|
+
cause?: unknown;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
interface Logger {
|
|
20
|
+
info(obj: Record<string, unknown>, msg: string): void;
|
|
21
|
+
warn(obj: Record<string, unknown>, msg: string): void;
|
|
22
|
+
error(obj: Record<string, unknown>, msg: string): void;
|
|
23
|
+
debug(obj: Record<string, unknown>, msg: string): void;
|
|
24
|
+
child(bindings: Record<string, unknown>): Logger;
|
|
25
|
+
}
|
|
26
|
+
export interface NIP59ClaimWrapperOptions {
|
|
27
|
+
nip59Enabled: boolean;
|
|
28
|
+
logger: Logger;
|
|
29
|
+
}
|
|
30
|
+
export declare class NIP59ClaimWrapper {
|
|
31
|
+
private readonly _nip59Enabled;
|
|
32
|
+
private readonly _logger;
|
|
33
|
+
constructor(options: NIP59ClaimWrapperOptions);
|
|
34
|
+
isEnabled(): boolean;
|
|
35
|
+
wrapClaim(claim: BTPClaimMessage, senderPrivateKey: Uint8Array, receiverPublicKey: Uint8Array): WrappedClaim | null;
|
|
36
|
+
unwrapClaim(wrappedClaim: WrappedClaim, receiverPrivateKey: Uint8Array): BTPClaimMessage;
|
|
37
|
+
private _encryptSeal;
|
|
38
|
+
private _decryptSeal;
|
|
39
|
+
private _encryptGiftWrap;
|
|
40
|
+
private _decryptGiftWrap;
|
|
41
|
+
private _computeSharedSecret;
|
|
42
|
+
private _signCiphertext;
|
|
43
|
+
private _verifyCiphertext;
|
|
44
|
+
private _randomizeTimestamp;
|
|
45
|
+
}
|
|
46
|
+
export declare const NIP59TransportWrapper: typeof NIP59ClaimWrapper;
|
|
47
|
+
export declare function serializeWrappedClaim(wrapped: WrappedClaim): Buffer;
|
|
48
|
+
export declare function deserializeWrappedClaim(data: Buffer): WrappedClaim;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=nip59-claim-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip59-claim-wrapper.d.ts","sourceRoot":"","sources":["../../../src/settlement/privacy/nip59-claim-wrapper.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAYjE,MAAM,WAAW,YAAY;IAE3B,kBAAkB,EAAE,MAAM,CAAC;IAE3B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,EAAE,KAAK,CAAC;CAChB;AAKD,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAYX,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;gBAE9B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAoBD,UAAU,MAAM;IACd,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAClD;AAOD,MAAM,WAAW,wBAAwB;IAEvC,YAAY,EAAE,OAAO,CAAC;IAEtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkCD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,wBAAwB;IAQ7C,SAAS,IAAI,OAAO;IAYpB,SAAS,CACP,KAAK,EAAE,eAAe,EACtB,gBAAgB,EAAE,UAAU,EAC5B,iBAAiB,EAAE,UAAU,GAC5B,YAAY,GAAG,IAAI;IA0EtB,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,GAAG,eAAe;IA2HxF,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,mBAAmB;CAS5B;AAKD,eAAO,MAAM,qBAAqB,0BAAoB,CAAC;AAYvD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAEnE;AASD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAyBlE"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NIP59TransportWrapper = exports.NIP59ClaimWrapper = exports.NIP59WrapError = exports.BTP_WRAPPED_CLAIM_PROTOCOL = void 0;
|
|
4
|
+
exports.serializeWrappedClaim = serializeWrappedClaim;
|
|
5
|
+
exports.deserializeWrappedClaim = deserializeWrappedClaim;
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
const chacha_1 = require("@noble/ciphers/chacha");
|
|
8
|
+
const utils_1 = require("@noble/ciphers/utils");
|
|
9
|
+
const hkdf_1 = require("@noble/hashes/hkdf");
|
|
10
|
+
const sha2_1 = require("@noble/hashes/sha2");
|
|
11
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
12
|
+
exports.BTP_WRAPPED_CLAIM_PROTOCOL = {
|
|
13
|
+
NAME: 'claim-wrapped',
|
|
14
|
+
CONTENT_TYPE: 0,
|
|
15
|
+
VERSION: '1.0',
|
|
16
|
+
};
|
|
17
|
+
class NIP59WrapError extends Error {
|
|
18
|
+
name = 'NIP59WrapError';
|
|
19
|
+
constructor(message, options) {
|
|
20
|
+
super(message, options);
|
|
21
|
+
Error.captureStackTrace(this, NIP59WrapError);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.NIP59WrapError = NIP59WrapError;
|
|
25
|
+
const FORTY_EIGHT_HOURS_MS = 48 * 60 * 60 * 1000;
|
|
26
|
+
const CHACHA_NONCE_BYTES = 12;
|
|
27
|
+
const HKDF_KEY_BYTES = 32;
|
|
28
|
+
const SEAL_HKDF_INFO = 'nip59-seal';
|
|
29
|
+
const GIFTWRAP_HKDF_INFO = 'nip59-giftwrap';
|
|
30
|
+
class NIP59ClaimWrapper {
|
|
31
|
+
_nip59Enabled;
|
|
32
|
+
_logger;
|
|
33
|
+
constructor(options) {
|
|
34
|
+
this._nip59Enabled = options.nip59Enabled;
|
|
35
|
+
this._logger = options.logger.child({ component: 'nip59-claim-wrapper' });
|
|
36
|
+
}
|
|
37
|
+
isEnabled() {
|
|
38
|
+
return this._nip59Enabled;
|
|
39
|
+
}
|
|
40
|
+
wrapClaim(claim, senderPrivateKey, receiverPublicKey) {
|
|
41
|
+
if (!this._nip59Enabled) {
|
|
42
|
+
this._logger.debug({ event: 'nip59_wrap_skip' }, 'NIP-59 wrapping disabled, passing claim through');
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const rumor = JSON.stringify(claim);
|
|
47
|
+
const rumorBytes = (0, utils_1.utf8ToBytes)(rumor);
|
|
48
|
+
const senderPubKey = secp256k1_1.secp256k1.getPublicKey(senderPrivateKey, true);
|
|
49
|
+
const sealCiphertext = this._encryptSeal(rumorBytes, senderPrivateKey, receiverPublicKey, senderPubKey);
|
|
50
|
+
const sealSignature = this._signCiphertext(sealCiphertext, senderPrivateKey);
|
|
51
|
+
const sealPayload = {
|
|
52
|
+
senderPublicKey: Buffer.from(senderPubKey).toString('hex'),
|
|
53
|
+
signature: Buffer.from(sealSignature).toString('base64'),
|
|
54
|
+
sealCiphertext: Buffer.from(sealCiphertext).toString('base64'),
|
|
55
|
+
};
|
|
56
|
+
const sealPayloadBytes = (0, utils_1.utf8ToBytes)(JSON.stringify(sealPayload));
|
|
57
|
+
const ephemeralPrivKey = (0, crypto_1.randomBytes)(32);
|
|
58
|
+
const ephemeralPubKey = secp256k1_1.secp256k1.getPublicKey(ephemeralPrivKey, true);
|
|
59
|
+
const giftWrapCiphertext = this._encryptGiftWrap(sealPayloadBytes, ephemeralPrivKey, receiverPublicKey);
|
|
60
|
+
ephemeralPrivKey.fill(0);
|
|
61
|
+
const wrapped = {
|
|
62
|
+
ephemeralPublicKey: Buffer.from(ephemeralPubKey).toString('hex'),
|
|
63
|
+
encryptedPayload: Buffer.from(giftWrapCiphertext).toString('base64'),
|
|
64
|
+
timestamp: this._randomizeTimestamp(),
|
|
65
|
+
version: '1.0',
|
|
66
|
+
};
|
|
67
|
+
this._logger.info({ event: 'nip59_wrap', claimMessageId: claim.messageId }, 'Wrapping claim with NIP-59 Gift Wrap');
|
|
68
|
+
return wrapped;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
throw new NIP59WrapError(`Failed to wrap claim: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
unwrapClaim(wrappedClaim, receiverPrivateKey) {
|
|
75
|
+
if (!wrappedClaim.ephemeralPublicKey || wrappedClaim.ephemeralPublicKey.length === 0) {
|
|
76
|
+
throw new NIP59WrapError('Invalid wrapped claim: missing ephemeralPublicKey', {
|
|
77
|
+
cause: new Error('Empty ephemeralPublicKey'),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (!wrappedClaim.encryptedPayload || wrappedClaim.encryptedPayload.length === 0) {
|
|
81
|
+
throw new NIP59WrapError('Invalid wrapped claim: missing encryptedPayload', {
|
|
82
|
+
cause: new Error('Empty encryptedPayload'),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
let sealPayloadBytes;
|
|
86
|
+
try {
|
|
87
|
+
const ephemeralPubKey = hexToBytes(wrappedClaim.ephemeralPublicKey);
|
|
88
|
+
const encryptedPayload = base64ToBytes(wrappedClaim.encryptedPayload);
|
|
89
|
+
sealPayloadBytes = this._decryptGiftWrap(encryptedPayload, receiverPrivateKey, ephemeralPubKey);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err instanceof NIP59WrapError)
|
|
93
|
+
throw err;
|
|
94
|
+
this._logger.warn({
|
|
95
|
+
event: 'nip59_unwrap_failed',
|
|
96
|
+
layer: 'gift_wrap',
|
|
97
|
+
error: err instanceof Error ? err.message : String(err),
|
|
98
|
+
}, 'Failed to unwrap NIP-59 gift wrap layer');
|
|
99
|
+
throw new NIP59WrapError(`Failed to decrypt gift wrap layer: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
100
|
+
}
|
|
101
|
+
let rumorBytes;
|
|
102
|
+
try {
|
|
103
|
+
const sealPayloadStr = bytesToUtf8(sealPayloadBytes);
|
|
104
|
+
const sealPayload = JSON.parse(sealPayloadStr);
|
|
105
|
+
const senderPubKey = hexToBytes(sealPayload.senderPublicKey);
|
|
106
|
+
const sealSignature = base64ToBytes(sealPayload.signature);
|
|
107
|
+
const sealCiphertext = base64ToBytes(sealPayload.sealCiphertext);
|
|
108
|
+
this._verifyCiphertext(sealCiphertext, sealSignature, senderPubKey);
|
|
109
|
+
rumorBytes = this._decryptSeal(sealCiphertext, receiverPrivateKey, senderPubKey);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (err instanceof NIP59WrapError)
|
|
113
|
+
throw err;
|
|
114
|
+
this._logger.warn({
|
|
115
|
+
event: 'nip59_unwrap_failed',
|
|
116
|
+
layer: 'seal',
|
|
117
|
+
error: err instanceof Error ? err.message : String(err),
|
|
118
|
+
}, 'Failed to unwrap NIP-59 seal layer');
|
|
119
|
+
throw new NIP59WrapError(`Failed to decrypt seal layer: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const rumorStr = bytesToUtf8(rumorBytes);
|
|
123
|
+
const claim = JSON.parse(rumorStr);
|
|
124
|
+
if (typeof claim !== 'object' ||
|
|
125
|
+
claim === null ||
|
|
126
|
+
typeof claim.version !== 'string' ||
|
|
127
|
+
typeof claim.blockchain !== 'string' ||
|
|
128
|
+
typeof claim.messageId !== 'string' ||
|
|
129
|
+
typeof claim.timestamp !== 'string' ||
|
|
130
|
+
typeof claim.senderId !== 'string') {
|
|
131
|
+
throw new NIP59WrapError('Rumor payload is not a valid BTPClaimMessage: missing required base fields', { cause: new Error('Invalid BTPClaimMessage structure') });
|
|
132
|
+
}
|
|
133
|
+
this._logger.info({ event: 'nip59_unwrap', claimMessageId: claim.messageId }, 'Successfully unwrapped NIP-59 claim');
|
|
134
|
+
return claim;
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
this._logger.warn({
|
|
138
|
+
event: 'nip59_unwrap_failed',
|
|
139
|
+
layer: 'rumor',
|
|
140
|
+
error: err instanceof Error ? err.message : String(err),
|
|
141
|
+
}, 'Failed to parse NIP-59 rumor layer');
|
|
142
|
+
throw new NIP59WrapError(`Failed to parse rumor layer: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
_encryptSeal(rumorBytes, senderPrivateKey, receiverPublicKey, senderPublicKey) {
|
|
146
|
+
const sharedSecret = this._computeSharedSecret(senderPrivateKey, receiverPublicKey);
|
|
147
|
+
const key = (0, hkdf_1.hkdf)(sha2_1.sha256, sharedSecret, undefined, SEAL_HKDF_INFO, HKDF_KEY_BYTES);
|
|
148
|
+
const nonce = (0, crypto_1.randomBytes)(CHACHA_NONCE_BYTES);
|
|
149
|
+
const cipher = (0, chacha_1.chacha20poly1305)(key, nonce, senderPublicKey);
|
|
150
|
+
const ciphertext = cipher.encrypt(rumorBytes);
|
|
151
|
+
const result = new Uint8Array(CHACHA_NONCE_BYTES + ciphertext.length);
|
|
152
|
+
result.set(nonce, 0);
|
|
153
|
+
result.set(ciphertext, CHACHA_NONCE_BYTES);
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
_decryptSeal(sealCiphertext, receiverPrivateKey, senderPublicKey) {
|
|
157
|
+
const sharedSecret = this._computeSharedSecret(receiverPrivateKey, senderPublicKey);
|
|
158
|
+
const key = (0, hkdf_1.hkdf)(sha2_1.sha256, sharedSecret, undefined, SEAL_HKDF_INFO, HKDF_KEY_BYTES);
|
|
159
|
+
const nonce = sealCiphertext.slice(0, CHACHA_NONCE_BYTES);
|
|
160
|
+
const ciphertext = sealCiphertext.slice(CHACHA_NONCE_BYTES);
|
|
161
|
+
const cipher = (0, chacha_1.chacha20poly1305)(key, nonce, senderPublicKey);
|
|
162
|
+
return cipher.decrypt(ciphertext);
|
|
163
|
+
}
|
|
164
|
+
_encryptGiftWrap(sealPayloadBytes, ephemeralPrivateKey, receiverPublicKey) {
|
|
165
|
+
const sharedSecret = this._computeSharedSecret(ephemeralPrivateKey, receiverPublicKey);
|
|
166
|
+
const key = (0, hkdf_1.hkdf)(sha2_1.sha256, sharedSecret, undefined, GIFTWRAP_HKDF_INFO, HKDF_KEY_BYTES);
|
|
167
|
+
const nonce = (0, crypto_1.randomBytes)(CHACHA_NONCE_BYTES);
|
|
168
|
+
const cipher = (0, chacha_1.chacha20poly1305)(key, nonce);
|
|
169
|
+
const ciphertext = cipher.encrypt(sealPayloadBytes);
|
|
170
|
+
const result = new Uint8Array(CHACHA_NONCE_BYTES + ciphertext.length);
|
|
171
|
+
result.set(nonce, 0);
|
|
172
|
+
result.set(ciphertext, CHACHA_NONCE_BYTES);
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
_decryptGiftWrap(giftWrapCiphertext, receiverPrivateKey, ephemeralPublicKey) {
|
|
176
|
+
const sharedSecret = this._computeSharedSecret(receiverPrivateKey, ephemeralPublicKey);
|
|
177
|
+
const key = (0, hkdf_1.hkdf)(sha2_1.sha256, sharedSecret, undefined, GIFTWRAP_HKDF_INFO, HKDF_KEY_BYTES);
|
|
178
|
+
const nonce = giftWrapCiphertext.slice(0, CHACHA_NONCE_BYTES);
|
|
179
|
+
const ciphertext = giftWrapCiphertext.slice(CHACHA_NONCE_BYTES);
|
|
180
|
+
const cipher = (0, chacha_1.chacha20poly1305)(key, nonce);
|
|
181
|
+
return cipher.decrypt(ciphertext);
|
|
182
|
+
}
|
|
183
|
+
_computeSharedSecret(privateKey, publicKey) {
|
|
184
|
+
const sharedPoint = secp256k1_1.secp256k1.getSharedSecret(privateKey, publicKey, true);
|
|
185
|
+
return sharedPoint.slice(1);
|
|
186
|
+
}
|
|
187
|
+
_signCiphertext(ciphertext, privateKey) {
|
|
188
|
+
const messageHash = (0, sha2_1.sha256)(ciphertext);
|
|
189
|
+
const sig = secp256k1_1.secp256k1.sign(messageHash, privateKey);
|
|
190
|
+
return sig.toCompactRawBytes();
|
|
191
|
+
}
|
|
192
|
+
_verifyCiphertext(ciphertext, signature, publicKey) {
|
|
193
|
+
const messageHash = (0, sha2_1.sha256)(ciphertext);
|
|
194
|
+
const isValid = secp256k1_1.secp256k1.verify(signature, messageHash, publicKey);
|
|
195
|
+
if (!isValid) {
|
|
196
|
+
throw new NIP59WrapError('Seal signature verification failed: sender signature is invalid', {
|
|
197
|
+
cause: new Error('Invalid secp256k1 signature'),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
_randomizeTimestamp() {
|
|
202
|
+
const now = Date.now();
|
|
203
|
+
const offsetBytes = (0, crypto_1.randomBytes)(4);
|
|
204
|
+
const offsetRaw = offsetBytes.readUInt32BE(0);
|
|
205
|
+
const offset = (offsetRaw / 0xffffffff) * 2 * FORTY_EIGHT_HOURS_MS - FORTY_EIGHT_HOURS_MS;
|
|
206
|
+
return Math.round(now + offset);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.NIP59ClaimWrapper = NIP59ClaimWrapper;
|
|
210
|
+
exports.NIP59TransportWrapper = NIP59ClaimWrapper;
|
|
211
|
+
function serializeWrappedClaim(wrapped) {
|
|
212
|
+
return Buffer.from(JSON.stringify(wrapped), 'utf8');
|
|
213
|
+
}
|
|
214
|
+
function deserializeWrappedClaim(data) {
|
|
215
|
+
let parsed;
|
|
216
|
+
try {
|
|
217
|
+
const str = data.toString('utf8');
|
|
218
|
+
parsed = JSON.parse(str);
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
throw new NIP59WrapError(`Failed to deserialize WrappedClaim: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
222
|
+
}
|
|
223
|
+
if (typeof parsed.ephemeralPublicKey !== 'string' ||
|
|
224
|
+
typeof parsed.encryptedPayload !== 'string' ||
|
|
225
|
+
typeof parsed.timestamp !== 'number' ||
|
|
226
|
+
parsed.version !== '1.0') {
|
|
227
|
+
throw new NIP59WrapError('Invalid WrappedClaim structure', {
|
|
228
|
+
cause: new Error('Missing or invalid required fields'),
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
return parsed;
|
|
232
|
+
}
|
|
233
|
+
function hexToBytes(hex) {
|
|
234
|
+
if (hex.length % 2 !== 0) {
|
|
235
|
+
throw new Error(`Invalid hex string length: ${hex.length}`);
|
|
236
|
+
}
|
|
237
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
238
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
239
|
+
const byte = parseInt(hex.substring(i, i + 2), 16);
|
|
240
|
+
if (isNaN(byte)) {
|
|
241
|
+
throw new Error(`Invalid hex character at position ${i}`);
|
|
242
|
+
}
|
|
243
|
+
bytes[i / 2] = byte;
|
|
244
|
+
}
|
|
245
|
+
return bytes;
|
|
246
|
+
}
|
|
247
|
+
function base64ToBytes(base64) {
|
|
248
|
+
return new Uint8Array(Buffer.from(base64, 'base64'));
|
|
249
|
+
}
|
|
250
|
+
function bytesToUtf8(bytes) {
|
|
251
|
+
return Buffer.from(bytes).toString('utf8');
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=nip59-claim-wrapper.js.map
|