react-native-candle 0.1.20 → 0.1.21
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/ReactNativeCandle.podspec +1 -1
- package/ios/Sources/CandleActionViewModel.swift +13 -0
- package/ios/Sources/CandleTradeExecutionSheetWrapper.swift +31 -0
- package/ios/Sources/HostingViewController.swift +7 -0
- package/ios/Sources/RNCandle.swift +166 -39
- package/lib/commonjs/index.js +77 -13
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +77 -13
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +21 -7
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/specs/RNCandle.nitro.d.ts +6 -1
- package/lib/typescript/commonjs/src/specs/RNCandle.nitro.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +21 -7
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/specs/RNCandle.nitro.d.ts +6 -1
- package/lib/typescript/module/src/specs/RNCandle.nitro.d.ts.map +1 -1
- package/nitrogen/generated/ios/ReactNativeCandle-Swift-Cxx-Bridge.cpp +8 -0
- package/nitrogen/generated/ios/ReactNativeCandle-Swift-Cxx-Bridge.hpp +115 -81
- package/nitrogen/generated/ios/ReactNativeCandle-Swift-Cxx-Umbrella.hpp +3 -3
- package/nitrogen/generated/ios/c++/HybridRNCandleSpecSwift.hpp +57 -59
- package/nitrogen/generated/ios/swift/Func_void_TradeExecutionResult.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridRNCandleSpec.swift +3 -1
- package/nitrogen/generated/ios/swift/HybridRNCandleSpec_cxx.swift +23 -21
- package/nitrogen/generated/ios/swift/TradeExecutionResult.swift +82 -0
- package/nitrogen/generated/ios/swift/TradeQuote.swift +13 -2
- package/nitrogen/generated/shared/c++/HybridRNCandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRNCandleSpec.hpp +7 -7
- package/nitrogen/generated/shared/c++/TradeExecutionResult.hpp +76 -0
- package/nitrogen/generated/shared/c++/TradeQuote.hpp +7 -2
- package/package.json +1 -1
- package/src/index.ts +88 -20
- package/src/specs/RNCandle.nitro.ts +11 -1
- package/nitrogen/generated/ios/swift/ExecuteTradeRequest.swift +0 -44
- package/nitrogen/generated/shared/c++/ExecuteTradeRequest.hpp +0 -73
|
@@ -30,7 +30,7 @@ Pod::Spec.new do |s|
|
|
|
30
30
|
load 'nitrogen/generated/ios/ReactNativeCandle+autolinking.rb'
|
|
31
31
|
add_nitrogen_files(s)
|
|
32
32
|
|
|
33
|
-
s.dependency 'Candle', '3.0.
|
|
33
|
+
s.dependency 'Candle', '3.0.258-beta'
|
|
34
34
|
s.dependency 'React-jsi'
|
|
35
35
|
s.dependency 'React-callinvoker'
|
|
36
36
|
install_modules_dependencies(s)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Candle
|
|
2
|
+
import Combine
|
|
3
|
+
|
|
4
|
+
@available(iOS 17.0, *)
|
|
5
|
+
final class CandleActionViewModel: ObservableObject {
|
|
6
|
+
|
|
7
|
+
@Published var tradeQuote: Models.TradeQuote?
|
|
8
|
+
@Published var tradeResult: Result<Candle.Models.Trade, Candle.Models.ExecuteTrade.Error>?
|
|
9
|
+
|
|
10
|
+
init(tradeQuote: Models.TradeQuote?) {
|
|
11
|
+
self.tradeQuote = tradeQuote
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import Candle
|
|
2
|
+
import SwiftUI
|
|
3
|
+
|
|
4
|
+
@available(iOS 17.0, *)
|
|
5
|
+
struct CandleTradeExecutionSheetWrapper: View {
|
|
6
|
+
|
|
7
|
+
let candleClient: CandleClient
|
|
8
|
+
|
|
9
|
+
@ObservedObject var viewModel: CandleActionViewModel
|
|
10
|
+
let presentationBackground: PresentationBackground
|
|
11
|
+
|
|
12
|
+
var toCandlePresentationBackground: AnyShapeStyle {
|
|
13
|
+
switch presentationBackground {
|
|
14
|
+
case .default:
|
|
15
|
+
return AnyShapeStyle(Material.regular)
|
|
16
|
+
case .blur:
|
|
17
|
+
return AnyShapeStyle(Material.ultraThick)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var body: some View {
|
|
22
|
+
Color.clear
|
|
23
|
+
.candleTradeExecutionSheet(
|
|
24
|
+
item: $viewModel.tradeQuote,
|
|
25
|
+
presentationBackground: toCandlePresentationBackground
|
|
26
|
+
) { result in
|
|
27
|
+
viewModel.tradeResult = result
|
|
28
|
+
}
|
|
29
|
+
.environment(candleClient)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -8,6 +8,13 @@ extension UIViewController {
|
|
|
8
8
|
child.view.pinEdges(to: view)
|
|
9
9
|
child.didMove(toParent: self)
|
|
10
10
|
}
|
|
11
|
+
|
|
12
|
+
func embedOnTop(_ child: UIViewController) {
|
|
13
|
+
addChild(child)
|
|
14
|
+
view.insertSubview(child.view, aboveSubview: view)
|
|
15
|
+
child.view.pinEdges(to: view)
|
|
16
|
+
child.didMove(toParent: self)
|
|
17
|
+
}
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
extension UIView {
|
|
@@ -91,6 +91,69 @@ final class HybridRNCandle: HybridRNCandleSpec {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
public func candleTradeExecutionSheet(
|
|
95
|
+
tradeQuote: TradeQuote,
|
|
96
|
+
presentationBackground: PresentationBackground,
|
|
97
|
+
completion: @escaping (TradeExecutionResult) -> Void
|
|
98
|
+
) throws {
|
|
99
|
+
Task { @MainActor in
|
|
100
|
+
let wrapperView = CandleTradeExecutionSheetWrapper(
|
|
101
|
+
candleClient: try viewModel.candleClient,
|
|
102
|
+
viewModel: .init(tradeQuote: nil),
|
|
103
|
+
presentationBackground: presentationBackground
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
let hostingVC = UIHostingController(rootView: wrapperView)
|
|
107
|
+
hostingVC.view.backgroundColor = .clear
|
|
108
|
+
guard
|
|
109
|
+
let rootHostingVC = UIApplication.keyWindow?
|
|
110
|
+
.rootViewController
|
|
111
|
+
else {
|
|
112
|
+
throw RNClientError.badInitialization(
|
|
113
|
+
message:
|
|
114
|
+
"\(#function) \(#line): Candle client was not initialized."
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
rootHostingVC.embedOnTop(hostingVC)
|
|
118
|
+
let tradeQuote = try tradeQuote.toCandleModel
|
|
119
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
|
|
120
|
+
wrapperView.viewModel.tradeQuote = tradeQuote
|
|
121
|
+
}
|
|
122
|
+
wrapperView.viewModel.$tradeQuote
|
|
123
|
+
.dropFirst()
|
|
124
|
+
.receive(on: RunLoop.main)
|
|
125
|
+
.sink { [weak hostingVC] trade in
|
|
126
|
+
if trade == nil {
|
|
127
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
|
|
128
|
+
hostingVC?.willMove(toParent: nil)
|
|
129
|
+
hostingVC?.view.removeFromSuperview()
|
|
130
|
+
hostingVC?.removeFromParent()
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
.store(in: &cancellables)
|
|
135
|
+
|
|
136
|
+
wrapperView.viewModel.$tradeResult
|
|
137
|
+
.receive(on: RunLoop.main)
|
|
138
|
+
.sink { result in
|
|
139
|
+
switch result {
|
|
140
|
+
case .success(let trade):
|
|
141
|
+
completion(
|
|
142
|
+
.init(
|
|
143
|
+
trade: trade.toTrade,
|
|
144
|
+
error: nil
|
|
145
|
+
)
|
|
146
|
+
)
|
|
147
|
+
case .failure(let error):
|
|
148
|
+
completion(.init(trade: nil, error: "We encountered an error: \(error)"))
|
|
149
|
+
case .none:
|
|
150
|
+
break
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
.store(in: &cancellables)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
94
157
|
// MARK: - Public
|
|
95
158
|
|
|
96
159
|
public func unlinkAccount(ref: LinkedAccountRef) throws -> Promise<Void> {
|
|
@@ -152,13 +215,7 @@ final class HybridRNCandle: HybridRNCandleSpec {
|
|
|
152
215
|
gained: try ref.gained.toTradeAssetRef
|
|
153
216
|
)
|
|
154
217
|
)
|
|
155
|
-
return
|
|
156
|
-
dateTime: trade.dateTime,
|
|
157
|
-
state: trade.state.toRNModel,
|
|
158
|
-
counterparty: trade.toCounterparty,
|
|
159
|
-
lost: trade.lost.toAsset,
|
|
160
|
-
gained: trade.gained.toAsset
|
|
161
|
-
)
|
|
218
|
+
return trade.toTrade
|
|
162
219
|
}
|
|
163
220
|
}
|
|
164
221
|
|
|
@@ -172,15 +229,7 @@ final class HybridRNCandle: HybridRNCandleSpec {
|
|
|
172
229
|
lostAssetKind: query.toLostAssetKind,
|
|
173
230
|
counterpartyKind: query.toCounterpartyKindPayload
|
|
174
231
|
))
|
|
175
|
-
return trades.map
|
|
176
|
-
return Trade(
|
|
177
|
-
dateTime: trade.dateTime,
|
|
178
|
-
state: trade.state.toRNModel,
|
|
179
|
-
counterparty: trade.toCounterparty,
|
|
180
|
-
lost: trade.lost.toAsset,
|
|
181
|
-
gained: trade.gained.toAsset
|
|
182
|
-
)
|
|
183
|
-
}
|
|
232
|
+
return trades.map(\.toTrade)
|
|
184
233
|
}
|
|
185
234
|
}
|
|
186
235
|
|
|
@@ -198,31 +247,13 @@ final class HybridRNCandle: HybridRNCandleSpec {
|
|
|
198
247
|
return accounts.map { account in
|
|
199
248
|
TradeQuote(
|
|
200
249
|
lost: account.lost.toAsset,
|
|
201
|
-
gained: account.gained.toAsset
|
|
250
|
+
gained: account.gained.toAsset,
|
|
251
|
+
context: account.context
|
|
202
252
|
)
|
|
203
253
|
}
|
|
204
254
|
}
|
|
205
255
|
}
|
|
206
256
|
|
|
207
|
-
public func executeTrade(request: ExecuteTradeRequest) throws -> Promise<
|
|
208
|
-
Trade
|
|
209
|
-
> {
|
|
210
|
-
.async {
|
|
211
|
-
let trade = try await self.viewModel.candleClient.executeTrade(
|
|
212
|
-
context: .init(
|
|
213
|
-
linkedAccountID: request.linkedAccountID,
|
|
214
|
-
context: request.context)
|
|
215
|
-
)
|
|
216
|
-
return Trade(
|
|
217
|
-
dateTime: trade.dateTime,
|
|
218
|
-
state: trade.state.toRNModel,
|
|
219
|
-
counterparty: trade.toCounterparty,
|
|
220
|
-
lost: trade.lost.toAsset,
|
|
221
|
-
gained: trade.gained.toAsset
|
|
222
|
-
)
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
257
|
public func deleteUser() throws -> Promise<Void> {
|
|
227
258
|
.async {
|
|
228
259
|
try await self.viewModel.candleClient.deleteUser()
|
|
@@ -489,6 +520,18 @@ extension Models.TradeAsset {
|
|
|
489
520
|
}
|
|
490
521
|
}
|
|
491
522
|
|
|
523
|
+
extension Models.Trade {
|
|
524
|
+
var toTrade: Trade {
|
|
525
|
+
.init(
|
|
526
|
+
dateTime: dateTime,
|
|
527
|
+
state: state.toRNModel,
|
|
528
|
+
counterparty: toCounterparty,
|
|
529
|
+
lost: lost.toAsset,
|
|
530
|
+
gained: gained.toAsset
|
|
531
|
+
)
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
492
535
|
extension TradeQuoteRequest {
|
|
493
536
|
var toGained: Models.TradeAssetQuoteRequest {
|
|
494
537
|
get throws {
|
|
@@ -505,11 +548,15 @@ extension TradeQuoteRequest {
|
|
|
505
548
|
} else if let marketAssetQuoteRequest = gained
|
|
506
549
|
.marketAssetQuoteRequest
|
|
507
550
|
{
|
|
551
|
+
guard
|
|
552
|
+
let assetKind = Models.MarketAssetQuoteRequest.AssetKindPayload(
|
|
553
|
+
rawValue: marketAssetQuoteRequest.assetKind)
|
|
554
|
+
else {
|
|
555
|
+
throw RNClientError.badEncoding
|
|
556
|
+
}
|
|
508
557
|
return Models.TradeAssetQuoteRequest.MarketAssetQuoteRequest(
|
|
509
558
|
.init(
|
|
510
|
-
assetKind:
|
|
511
|
-
rawValue: marketAssetQuoteRequest.assetKind)
|
|
512
|
-
?? .stock,
|
|
559
|
+
assetKind: assetKind,
|
|
513
560
|
serviceAccountID: marketAssetQuoteRequest
|
|
514
561
|
.serviceAccountID,
|
|
515
562
|
serviceAssetID: marketAssetQuoteRequest.serviceAssetID,
|
|
@@ -1078,3 +1125,83 @@ extension TradeAssetRef {
|
|
|
1078
1125
|
}
|
|
1079
1126
|
}
|
|
1080
1127
|
}
|
|
1128
|
+
|
|
1129
|
+
extension TradeAsset {
|
|
1130
|
+
var toCandleModel: Models.TradeAsset {
|
|
1131
|
+
get throws {
|
|
1132
|
+
if let fiat = fiatAsset {
|
|
1133
|
+
return .FiatAsset(
|
|
1134
|
+
.init(
|
|
1135
|
+
assetKind: .fiat,
|
|
1136
|
+
serviceTradeID: fiat.serviceTradeID,
|
|
1137
|
+
serviceAccountID: fiat.serviceAccountID,
|
|
1138
|
+
currencyCode: fiat.currencyCode,
|
|
1139
|
+
amount: fiat.amount,
|
|
1140
|
+
linkedAccountID: fiat.linkedAccountID,
|
|
1141
|
+
service: fiat.service.toService
|
|
1142
|
+
)
|
|
1143
|
+
)
|
|
1144
|
+
} else if let market = marketTradeAsset {
|
|
1145
|
+
guard let assetKind = Models.MarketTradeAsset.AssetKindPayload(rawValue: market.assetKind)
|
|
1146
|
+
else {
|
|
1147
|
+
throw RNClientError.badEncoding
|
|
1148
|
+
}
|
|
1149
|
+
return .MarketTradeAsset(
|
|
1150
|
+
.init(
|
|
1151
|
+
assetKind: assetKind,
|
|
1152
|
+
serviceAccountID: market.serviceAccountID,
|
|
1153
|
+
serviceAssetID: market.serviceAssetID,
|
|
1154
|
+
symbol: market.symbol,
|
|
1155
|
+
amount: market.amount,
|
|
1156
|
+
serviceTradeID: market.serviceTradeID,
|
|
1157
|
+
linkedAccountID: market.linkedAccountID,
|
|
1158
|
+
service: market.service.toService,
|
|
1159
|
+
name: market.name,
|
|
1160
|
+
color: market.color,
|
|
1161
|
+
logoURL: market.logoURL
|
|
1162
|
+
)
|
|
1163
|
+
)
|
|
1164
|
+
} else if let transport = transportAsset {
|
|
1165
|
+
return .TransportAsset(
|
|
1166
|
+
.init(
|
|
1167
|
+
assetKind: .transport,
|
|
1168
|
+
serviceTradeID: transport.serviceTradeID,
|
|
1169
|
+
serviceAssetID: transport.serviceAssetID,
|
|
1170
|
+
name: transport.name,
|
|
1171
|
+
description: transport.description,
|
|
1172
|
+
imageURL: transport.imageURL,
|
|
1173
|
+
originCoordinates: .init(
|
|
1174
|
+
latitude: transport.originCoordinates.latitude,
|
|
1175
|
+
longitude: transport.originCoordinates.longitude
|
|
1176
|
+
),
|
|
1177
|
+
originAddress: .init(value: transport.originAddress.value),
|
|
1178
|
+
destinationCoordinates: .init(
|
|
1179
|
+
latitude: transport.destinationCoordinates.latitude,
|
|
1180
|
+
longitude: transport.destinationCoordinates.longitude
|
|
1181
|
+
),
|
|
1182
|
+
destinationAddress: .init(value: transport.destinationAddress.value),
|
|
1183
|
+
seats: transport.seats,
|
|
1184
|
+
linkedAccountID: transport.linkedAccountID,
|
|
1185
|
+
service: transport.service.toService
|
|
1186
|
+
)
|
|
1187
|
+
)
|
|
1188
|
+
} else if otherAsset != nil {
|
|
1189
|
+
return .OtherAsset(.init(assetKind: .other))
|
|
1190
|
+
} else {
|
|
1191
|
+
return .NothingAsset(.init(assetKind: .nothing))
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
extension TradeQuote {
|
|
1198
|
+
var toCandleModel: Models.TradeQuote {
|
|
1199
|
+
get throws {
|
|
1200
|
+
.init(
|
|
1201
|
+
lost: try lost.toCandleModel,
|
|
1202
|
+
gained: try gained.toCandleModel,
|
|
1203
|
+
context: context
|
|
1204
|
+
)
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -11,6 +11,31 @@ class CandleClient {
|
|
|
11
11
|
this.candle = CandleHybridObject;
|
|
12
12
|
this.candle.initialize(appUser);
|
|
13
13
|
}
|
|
14
|
+
presentTradeExecutionSheet(input) {
|
|
15
|
+
const quote = this.convertTradeQuote(input.tradeQuote);
|
|
16
|
+
this.candle.candleTradeExecutionSheet(quote, input.presentationBackground ?? "default", result => {
|
|
17
|
+
if (input.completion === undefined) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (result.trade !== undefined) {
|
|
21
|
+
input.completion({
|
|
22
|
+
kind: "success",
|
|
23
|
+
...result.trade,
|
|
24
|
+
counterparty: this.convertToCounterparty(result.trade.counterparty),
|
|
25
|
+
lost: this.convertTradeAsset(result.trade.lost),
|
|
26
|
+
gained: this.convertTradeAsset(result.trade.gained)
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
if (result.error === undefined) {
|
|
30
|
+
throw new Error("Internal Candle Error: corrupted trade execution result.");
|
|
31
|
+
}
|
|
32
|
+
input.completion({
|
|
33
|
+
kind: "failure",
|
|
34
|
+
error: result.error
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
14
39
|
presentCandleLinkSheet({
|
|
15
40
|
services = undefined,
|
|
16
41
|
cornerRadius = 24,
|
|
@@ -58,16 +83,6 @@ class CandleClient {
|
|
|
58
83
|
async getAvailableTools() {
|
|
59
84
|
return this.candle.getAvailableTools();
|
|
60
85
|
}
|
|
61
|
-
async executeTrade(request) {
|
|
62
|
-
const result = await this.candle.executeTrade(request);
|
|
63
|
-
return {
|
|
64
|
-
dateTime: result.dateTime,
|
|
65
|
-
state: result.state,
|
|
66
|
-
counterparty: this.convertToCounterparty(result.counterparty),
|
|
67
|
-
lost: this.convertTradeAsset(result.lost),
|
|
68
|
-
gained: this.convertTradeAsset(result.gained)
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
86
|
async executeTool(tool) {
|
|
72
87
|
return this.candle.executeTool(tool);
|
|
73
88
|
}
|
|
@@ -140,7 +155,8 @@ class CandleClient {
|
|
|
140
155
|
return quotes.map(quote => {
|
|
141
156
|
return {
|
|
142
157
|
gained: this.convertTradeAsset(quote.gained),
|
|
143
|
-
lost: this.convertTradeAsset(quote.lost)
|
|
158
|
+
lost: this.convertTradeAsset(quote.lost),
|
|
159
|
+
context: quote.context
|
|
144
160
|
};
|
|
145
161
|
});
|
|
146
162
|
}
|
|
@@ -185,6 +201,46 @@ class CandleClient {
|
|
|
185
201
|
};
|
|
186
202
|
}
|
|
187
203
|
}
|
|
204
|
+
toInternalTradeAsset(asset) {
|
|
205
|
+
switch (asset.assetKind) {
|
|
206
|
+
case "fiat":
|
|
207
|
+
return {
|
|
208
|
+
fiatAsset: asset
|
|
209
|
+
};
|
|
210
|
+
case "stock":
|
|
211
|
+
case "crypto":
|
|
212
|
+
return {
|
|
213
|
+
marketTradeAsset: {
|
|
214
|
+
...asset,
|
|
215
|
+
assetKind: asset.assetKind
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
case "transport":
|
|
219
|
+
return {
|
|
220
|
+
transportAsset: asset
|
|
221
|
+
};
|
|
222
|
+
case "other":
|
|
223
|
+
return {
|
|
224
|
+
otherAsset: asset
|
|
225
|
+
};
|
|
226
|
+
case "nothing":
|
|
227
|
+
return {
|
|
228
|
+
nothingAsset: asset
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
convertTradeQuote(tradeQuote) {
|
|
233
|
+
const {
|
|
234
|
+
context,
|
|
235
|
+
gained,
|
|
236
|
+
lost
|
|
237
|
+
} = tradeQuote;
|
|
238
|
+
return {
|
|
239
|
+
context,
|
|
240
|
+
gained: this.toInternalTradeAsset(gained),
|
|
241
|
+
lost: this.toInternalTradeAsset(lost)
|
|
242
|
+
};
|
|
243
|
+
}
|
|
188
244
|
convertTradeAsset(tradeAsset) {
|
|
189
245
|
if (tradeAsset.fiatAsset !== undefined) {
|
|
190
246
|
return {
|
|
@@ -192,9 +248,10 @@ class CandleClient {
|
|
|
192
248
|
assetKind: "fiat"
|
|
193
249
|
};
|
|
194
250
|
} else if (tradeAsset.marketTradeAsset !== undefined) {
|
|
251
|
+
this.assertMarketAssetKind(tradeAsset.marketTradeAsset.assetKind);
|
|
195
252
|
return {
|
|
196
253
|
...tradeAsset.marketTradeAsset,
|
|
197
|
-
assetKind: tradeAsset.marketTradeAsset.assetKind
|
|
254
|
+
assetKind: this.assertMarketAssetKind(tradeAsset.marketTradeAsset.assetKind)
|
|
198
255
|
};
|
|
199
256
|
} else if (tradeAsset.transportAsset !== undefined) {
|
|
200
257
|
return {
|
|
@@ -233,6 +290,13 @@ class CandleClient {
|
|
|
233
290
|
throw new Error("Unknown counterparty kind");
|
|
234
291
|
}
|
|
235
292
|
}
|
|
293
|
+
assertMarketAssetKind(kind) {
|
|
294
|
+
if (kind !== "stock" && kind !== "crypto") {
|
|
295
|
+
throw new Error("Internal Candle Error: corrupted market account.");
|
|
296
|
+
} else {
|
|
297
|
+
return kind;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
236
300
|
convertToAssetAccount(account) {
|
|
237
301
|
const {
|
|
238
302
|
legalAccountKind,
|
|
@@ -257,7 +321,7 @@ class CandleClient {
|
|
|
257
321
|
nickname,
|
|
258
322
|
details: {
|
|
259
323
|
...marketAccountDetails,
|
|
260
|
-
assetKind: marketAccountDetails.assetKind
|
|
324
|
+
assetKind: this.assertMarketAssetKind(marketAccountDetails.assetKind)
|
|
261
325
|
}
|
|
262
326
|
};
|
|
263
327
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeNitroModules","require","CandleClient","constructor","appUser","CandleHybridObject","NitroModules","createHybridObject","candle","initialize","
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","CandleClient","constructor","appUser","CandleHybridObject","NitroModules","createHybridObject","candle","initialize","presentTradeExecutionSheet","input","quote","convertTradeQuote","tradeQuote","candleTradeExecutionSheet","presentationBackground","result","completion","undefined","trade","kind","counterparty","convertToCounterparty","lost","convertTradeAsset","gained","error","Error","presentCandleLinkSheet","services","cornerRadius","customerName","showDynamicLoading","presentationStyle","onSuccess","candleLinkSheet","getLinkedAccounts","accounts","map","account","details","activeLinkedAccountDetails","state","inactiveLinkedAccountDetails","getLinkedAccount","ref","unlinkAccount","path","deleteUser","getAvailableTools","executeTool","tool","getAssetAccounts","query","convertToAssetAccount","getAssetAccount","getTrades","trades","dateTime","getTrade","convertTradeAssetRef","getTradeQuotes","request","gainedRequest","assetKind","fiatAssetQuoteRequest","marketAssetQuoteRequest","transportAssetQuoteRequest","nothingAssetQuoteRequest","quotes","linkedAccountIDs","context","tradeAssetRef","fiatAssetRef","linkedAccountID","serviceTradeID","marketTradeAssetRef","transportAssetRef","otherAssetRef","nothingAssetRef","toInternalTradeAsset","asset","fiatAsset","marketTradeAsset","transportAsset","otherAsset","nothingAsset","tradeAsset","assertMarketAssetKind","merchantCounterparty","userCounterparty","serviceCounterparty","legalAccountKind","nickname","fiatAccountDetails","marketAccountDetails","exports"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -7,6 +7,31 @@ export class CandleClient {
|
|
|
7
7
|
this.candle = CandleHybridObject;
|
|
8
8
|
this.candle.initialize(appUser);
|
|
9
9
|
}
|
|
10
|
+
presentTradeExecutionSheet(input) {
|
|
11
|
+
const quote = this.convertTradeQuote(input.tradeQuote);
|
|
12
|
+
this.candle.candleTradeExecutionSheet(quote, input.presentationBackground ?? "default", result => {
|
|
13
|
+
if (input.completion === undefined) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (result.trade !== undefined) {
|
|
17
|
+
input.completion({
|
|
18
|
+
kind: "success",
|
|
19
|
+
...result.trade,
|
|
20
|
+
counterparty: this.convertToCounterparty(result.trade.counterparty),
|
|
21
|
+
lost: this.convertTradeAsset(result.trade.lost),
|
|
22
|
+
gained: this.convertTradeAsset(result.trade.gained)
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
if (result.error === undefined) {
|
|
26
|
+
throw new Error("Internal Candle Error: corrupted trade execution result.");
|
|
27
|
+
}
|
|
28
|
+
input.completion({
|
|
29
|
+
kind: "failure",
|
|
30
|
+
error: result.error
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
10
35
|
presentCandleLinkSheet({
|
|
11
36
|
services = undefined,
|
|
12
37
|
cornerRadius = 24,
|
|
@@ -54,16 +79,6 @@ export class CandleClient {
|
|
|
54
79
|
async getAvailableTools() {
|
|
55
80
|
return this.candle.getAvailableTools();
|
|
56
81
|
}
|
|
57
|
-
async executeTrade(request) {
|
|
58
|
-
const result = await this.candle.executeTrade(request);
|
|
59
|
-
return {
|
|
60
|
-
dateTime: result.dateTime,
|
|
61
|
-
state: result.state,
|
|
62
|
-
counterparty: this.convertToCounterparty(result.counterparty),
|
|
63
|
-
lost: this.convertTradeAsset(result.lost),
|
|
64
|
-
gained: this.convertTradeAsset(result.gained)
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
82
|
async executeTool(tool) {
|
|
68
83
|
return this.candle.executeTool(tool);
|
|
69
84
|
}
|
|
@@ -136,7 +151,8 @@ export class CandleClient {
|
|
|
136
151
|
return quotes.map(quote => {
|
|
137
152
|
return {
|
|
138
153
|
gained: this.convertTradeAsset(quote.gained),
|
|
139
|
-
lost: this.convertTradeAsset(quote.lost)
|
|
154
|
+
lost: this.convertTradeAsset(quote.lost),
|
|
155
|
+
context: quote.context
|
|
140
156
|
};
|
|
141
157
|
});
|
|
142
158
|
}
|
|
@@ -181,6 +197,46 @@ export class CandleClient {
|
|
|
181
197
|
};
|
|
182
198
|
}
|
|
183
199
|
}
|
|
200
|
+
toInternalTradeAsset(asset) {
|
|
201
|
+
switch (asset.assetKind) {
|
|
202
|
+
case "fiat":
|
|
203
|
+
return {
|
|
204
|
+
fiatAsset: asset
|
|
205
|
+
};
|
|
206
|
+
case "stock":
|
|
207
|
+
case "crypto":
|
|
208
|
+
return {
|
|
209
|
+
marketTradeAsset: {
|
|
210
|
+
...asset,
|
|
211
|
+
assetKind: asset.assetKind
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
case "transport":
|
|
215
|
+
return {
|
|
216
|
+
transportAsset: asset
|
|
217
|
+
};
|
|
218
|
+
case "other":
|
|
219
|
+
return {
|
|
220
|
+
otherAsset: asset
|
|
221
|
+
};
|
|
222
|
+
case "nothing":
|
|
223
|
+
return {
|
|
224
|
+
nothingAsset: asset
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
convertTradeQuote(tradeQuote) {
|
|
229
|
+
const {
|
|
230
|
+
context,
|
|
231
|
+
gained,
|
|
232
|
+
lost
|
|
233
|
+
} = tradeQuote;
|
|
234
|
+
return {
|
|
235
|
+
context,
|
|
236
|
+
gained: this.toInternalTradeAsset(gained),
|
|
237
|
+
lost: this.toInternalTradeAsset(lost)
|
|
238
|
+
};
|
|
239
|
+
}
|
|
184
240
|
convertTradeAsset(tradeAsset) {
|
|
185
241
|
if (tradeAsset.fiatAsset !== undefined) {
|
|
186
242
|
return {
|
|
@@ -188,9 +244,10 @@ export class CandleClient {
|
|
|
188
244
|
assetKind: "fiat"
|
|
189
245
|
};
|
|
190
246
|
} else if (tradeAsset.marketTradeAsset !== undefined) {
|
|
247
|
+
this.assertMarketAssetKind(tradeAsset.marketTradeAsset.assetKind);
|
|
191
248
|
return {
|
|
192
249
|
...tradeAsset.marketTradeAsset,
|
|
193
|
-
assetKind: tradeAsset.marketTradeAsset.assetKind
|
|
250
|
+
assetKind: this.assertMarketAssetKind(tradeAsset.marketTradeAsset.assetKind)
|
|
194
251
|
};
|
|
195
252
|
} else if (tradeAsset.transportAsset !== undefined) {
|
|
196
253
|
return {
|
|
@@ -229,6 +286,13 @@ export class CandleClient {
|
|
|
229
286
|
throw new Error("Unknown counterparty kind");
|
|
230
287
|
}
|
|
231
288
|
}
|
|
289
|
+
assertMarketAssetKind(kind) {
|
|
290
|
+
if (kind !== "stock" && kind !== "crypto") {
|
|
291
|
+
throw new Error("Internal Candle Error: corrupted market account.");
|
|
292
|
+
} else {
|
|
293
|
+
return kind;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
232
296
|
convertToAssetAccount(account) {
|
|
233
297
|
const {
|
|
234
298
|
legalAccountKind,
|
|
@@ -253,7 +317,7 @@ export class CandleClient {
|
|
|
253
317
|
nickname,
|
|
254
318
|
details: {
|
|
255
319
|
...marketAccountDetails,
|
|
256
|
-
assetKind: marketAccountDetails.assetKind
|
|
320
|
+
assetKind: this.assertMarketAssetKind(marketAccountDetails.assetKind)
|
|
257
321
|
}
|
|
258
322
|
};
|
|
259
323
|
} else {
|