Skip to content

Commit 8e9e68b

Browse files
committed
Expose proposeFulfillingPaymentURI
1 parent b226c4b commit 8e9e68b

File tree

6 files changed

+84
-0
lines changed

6 files changed

+84
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Unreleased
44

5+
- added: `proposeFulfillingPaymentURI` support
6+
57
## 0.10.0 (2025-11-18)
68

79
- changed: Upgrade iOS and Android sdks to v2.4.0

android/src/main/java/app/edge/rnzcash/RNZcashModule.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,32 @@ class RNZcashModule(
381381
}
382382
}
383383

384+
@ReactMethod
385+
fun proposeFulfillingPaymentURI(
386+
alias: String,
387+
paymentUri: String,
388+
promise: Promise,
389+
) {
390+
val wallet = getWallet(alias)
391+
wallet.coroutineScope.launch {
392+
try {
393+
val account = wallet.getAccounts().first()
394+
val proposal =
395+
wallet.proposeFulfillingPaymentUri(
396+
account,
397+
paymentUri
398+
)
399+
val map = Arguments.createMap()
400+
map.putInt("transactionCount", proposal.transactionCount())
401+
map.putString("totalFee", proposal.totalFeeRequired().value.toString())
402+
map.putString("proposalBase64", Base64.getEncoder().encodeToString(proposal.toByteArray()))
403+
promise.resolve(map)
404+
} catch (t: Throwable) {
405+
promise.reject("Err", t)
406+
}
407+
}
408+
}
409+
384410
@kotlin.ExperimentalStdlibApi
385411
@ReactMethod
386412
fun createTransfer(

ios/RNZcash.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ @interface RCT_EXTERN_MODULE(RNZcash, RCTEventEmitter<RCTBridgeModule>)
3939
rejecter:(RCTPromiseRejectBlock)reject
4040
)
4141

42+
RCT_EXTERN_METHOD(proposeFulfillingPaymentURI:(NSString *)alias
43+
:(NSString *)paymentUri
44+
resolver:(RCTPromiseResolveBlock)resolve
45+
rejecter:(RCTPromiseRejectBlock)reject
46+
)
47+
4248
RCT_EXTERN_METHOD(createTransfer:(NSString *)alias
4349
:(NSString *)proposalBase64
4450
:(NSString *)seed

ios/RNZcash.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,42 @@ class RNZcash: RCTEventEmitter {
246246
}
247247
}
248248

249+
@objc func proposeFulfillingPaymentURI(
250+
_ alias: String, _ paymentUri: String,
251+
resolver resolve: @escaping RCTPromiseResolveBlock,
252+
rejecter reject: @escaping RCTPromiseRejectBlock
253+
) {
254+
Task {
255+
if let wallet = await synchronizerStore.get(alias) {
256+
do {
257+
guard let accountUUID = wallet.accountUUID else {
258+
reject("proposeFulfillingPaymentURI", "Account UUID not found", genericError)
259+
return
260+
}
261+
let proposal = try await wallet.synchronizer.proposefulfillingPaymentURI(
262+
paymentUri,
263+
accountUUID: accountUUID
264+
)
265+
let proposalBase64 = try proposal.inner.serializedData().base64EncodedString()
266+
267+
let out: NSMutableDictionary = [
268+
"proposalBase64": proposalBase64,
269+
"transactionCount": proposal.transactionCount(),
270+
"totalFee": String(proposal.totalFeeRequired().amount),
271+
]
272+
273+
resolve(out)
274+
} catch let error as ZcashError {
275+
reject("proposeFulfillingPaymentURI", "Failed to propose from payment URI", error)
276+
} catch {
277+
reject("proposeFulfillingPaymentURI", "Unknown error", error)
278+
}
279+
} else {
280+
reject("proposeFulfillingPaymentURI", "Wallet does not exist", genericError)
281+
}
282+
}
283+
}
284+
249285
@objc func createTransfer(
250286
_ alias: String, _ proposalBase64: String, _ seed: String,
251287
resolver resolve: @escaping RCTPromiseResolveBlock,

src/react-native.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@ export class Synchronizer {
9898
return result
9999
}
100100

101+
async proposeFulfillingPaymentURI(
102+
paymentUri: string
103+
): Promise<ProposalSuccess> {
104+
const result = await RNZcash.proposeFulfillingPaymentURI(
105+
this.alias,
106+
paymentUri
107+
)
108+
return result
109+
}
110+
101111
async createTransfer(
102112
opts: CreateTransferOpts
103113
): Promise<string | SpendFailure> {

src/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ export interface ProposeTransferOpts {
1616
memo?: string
1717
}
1818

19+
export interface ProposePaymentUriOpts {
20+
paymentUri: string
21+
}
22+
1923
export interface CreateTransferOpts {
2024
mnemonicSeed: string
2125
proposalBase64: string

0 commit comments

Comments
 (0)