Skip to content

Commit 91c77d6

Browse files
Jon-edgepeachbits
authored andcommitted
Expose proposeFulfillingPaymentURI
1 parent c113ab7 commit 91c77d6

File tree

5 files changed

+79
-0
lines changed

5 files changed

+79
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Unreleased
44

5+
- added: `proposeFulfillingPaymentURI` support
56
- changed: iOS - Emit balance after rescan
67
- fixed: iOS - get UUID after starting synchronizer
78

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
@@ -247,6 +247,42 @@ class RNZcash: RCTEventEmitter {
247247
}
248248
}
249249

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

0 commit comments

Comments
 (0)