@onramper/onramper-react-native 1.1.1 → 1.2.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/CHANGELOG.md +54 -0
- package/README.md +11 -0
- package/ios/Frameworks/OnramperSDK.xcframework/Info.plist +5 -5
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/Modules/OnramperSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/Modules/OnramperSDK.swiftmodule/arm64-apple-ios.swiftinterface +25 -2
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/OnramperSDK +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/OnramperSDK_OnramperSDK.bundle/PrivacyInfo.xcprivacy +36 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/PrivacyInfo.xcprivacy +36 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/DWARF/OnramperSDK +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/OnramperSDK.yml +2684 -2578
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/Modules/OnramperSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/Modules/OnramperSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +25 -2
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/Modules/OnramperSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/Modules/OnramperSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +25 -2
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/OnramperSDK +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/OnramperSDK_OnramperSDK.bundle/PrivacyInfo.xcprivacy +36 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/PrivacyInfo.xcprivacy +36 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/DWARF/OnramperSDK +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/OnramperSDK.yml +2684 -2578
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/OnramperSDK.yml +2651 -2545
- package/ios/HybridOnramperNitro.swift +32 -4
- package/ios/OnramperCheckoutBridge.swift +33 -0
- package/lib/commonjs/OnramperClient.js +47 -3
- package/lib/commonjs/OnramperClient.js.map +1 -1
- package/lib/module/OnramperClient.js +47 -3
- package/lib/module/OnramperClient.js.map +1 -1
- package/lib/typescript/commonjs/src/OnramperClient.d.ts +17 -2
- package/lib/typescript/commonjs/src/OnramperClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/specs/OnramperNitro.nitro.d.ts +2 -1
- package/lib/typescript/commonjs/src/specs/OnramperNitro.nitro.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types.d.ts +9 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -1
- package/lib/typescript/module/src/OnramperClient.d.ts +17 -2
- package/lib/typescript/module/src/OnramperClient.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/specs/OnramperNitro.nitro.d.ts +2 -1
- package/lib/typescript/module/src/specs/OnramperNitro.nitro.d.ts.map +1 -1
- package/lib/typescript/module/src/types.d.ts +9 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -1
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.cpp +8 -0
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.hpp +38 -0
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Umbrella.hpp +1 -0
- package/nitrogen/generated/ios/c++/HybridOnramperNitroSpecSwift.hpp +9 -2
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +53 -0
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec.swift +2 -1
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec_cxx.swift +24 -2
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.hpp +3 -1
- package/package.json +2 -2
- package/src/OnramperClient.ts +55 -2
- package/src/index.ts +1 -0
- package/src/specs/OnramperNitro.nitro.ts +7 -2
- package/src/types.ts +27 -0
|
@@ -11,10 +11,12 @@ import SwiftUI
|
|
|
11
11
|
final class HybridOnramperNitro: HybridOnramperNitroSpec {
|
|
12
12
|
private var client: OnramperClient?
|
|
13
13
|
private var stateObservation: AnyCancellable?
|
|
14
|
+
private var transactionIdObservation: AnyCancellable?
|
|
14
15
|
private var eventTask: Task<Void, Never>?
|
|
15
16
|
|
|
16
17
|
private var onState: ((String) -> Void)?
|
|
17
18
|
private var onEvent: ((String) -> Void)?
|
|
19
|
+
private var onTransactionId: ((String?) -> Void)?
|
|
18
20
|
// Nitro wraps a callback's return value in a Promise; our callback already
|
|
19
21
|
// returns Promise<NitroSessionCredentials>, hence the doubly-nested Promise.
|
|
20
22
|
private var sessionHandler: (() -> Promise<Promise<NitroSessionCredentials>>)?
|
|
@@ -33,6 +35,10 @@ final class HybridOnramperNitro: HybridOnramperNitroSpec {
|
|
|
33
35
|
self.onEvent = onEvent
|
|
34
36
|
}
|
|
35
37
|
|
|
38
|
+
func setTransactionIdListener(onTransactionId: @escaping (String?) -> Void) {
|
|
39
|
+
self.onTransactionId = onTransactionId
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
func setSessionExpirationHandler(handler: @escaping () -> Promise<Promise<NitroSessionCredentials>>) {
|
|
37
43
|
self.sessionHandler = handler
|
|
38
44
|
}
|
|
@@ -96,6 +102,9 @@ final class HybridOnramperNitro: HybridOnramperNitroSpec {
|
|
|
96
102
|
stateObservation = client.$state.sink { [weak self] state in
|
|
97
103
|
self?.onState?(jsonString(state.toJSDict()))
|
|
98
104
|
}
|
|
105
|
+
transactionIdObservation = client.$currentTransactionId.sink { [weak self] transactionId in
|
|
106
|
+
self?.onTransactionId?(transactionId)
|
|
107
|
+
}
|
|
99
108
|
// `events` is a computed AsyncStream that captures a single continuation, so
|
|
100
109
|
// access it exactly once here. CheckoutEvent is Sendable → safe to iterate
|
|
101
110
|
// off the main actor.
|
|
@@ -139,17 +148,33 @@ final class HybridOnramperNitro: HybridOnramperNitroSpec {
|
|
|
139
148
|
|
|
140
149
|
// MARK: - Checkout
|
|
141
150
|
|
|
142
|
-
func getCheckoutRequirements(
|
|
151
|
+
func getCheckoutRequirements(
|
|
152
|
+
requestJson: String,
|
|
153
|
+
prefillJson: String,
|
|
154
|
+
styleJson: String
|
|
155
|
+
) throws -> Promise<PreparedIntentResult> {
|
|
143
156
|
return Promise.async { [weak self] in
|
|
144
157
|
guard let self else { throw OnramperError.notInitialized }
|
|
145
|
-
return try await self.performGetCheckoutRequirements(
|
|
158
|
+
return try await self.performGetCheckoutRequirements(
|
|
159
|
+
requestJson: requestJson,
|
|
160
|
+
prefillJson: prefillJson,
|
|
161
|
+
styleJson: styleJson
|
|
162
|
+
)
|
|
146
163
|
}
|
|
147
164
|
}
|
|
148
165
|
|
|
149
166
|
@MainActor
|
|
150
|
-
private func performGetCheckoutRequirements(
|
|
167
|
+
private func performGetCheckoutRequirements(
|
|
168
|
+
requestJson: String,
|
|
169
|
+
prefillJson: String,
|
|
170
|
+
styleJson: String
|
|
171
|
+
) async throws -> PreparedIntentResult {
|
|
151
172
|
let client = try requireClient()
|
|
152
173
|
let request = try decodeCheckoutRequest(requestJson)
|
|
174
|
+
// Best-effort: an unusable prefill payload decodes to nil and the checkout
|
|
175
|
+
// proceeds without it. Never logged — the values are user PII, and the SDK
|
|
176
|
+
// makes the same guarantee at every log level.
|
|
177
|
+
let prefill = decodeUserPrefill(prefillJson)
|
|
153
178
|
let style = decodeCheckoutButtonStyle(styleJson)
|
|
154
179
|
|
|
155
180
|
// Single-flight, scoped to this client: a new prepared intent supersedes
|
|
@@ -159,7 +184,7 @@ final class HybridOnramperNitro: HybridOnramperNitroSpec {
|
|
|
159
184
|
await PreparedIntentRegistry.shared.drop(prev)
|
|
160
185
|
}
|
|
161
186
|
|
|
162
|
-
let result = try await client.getCheckoutRequirements(request, buttonStyle: style)
|
|
187
|
+
let result = try await client.getCheckoutRequirements(request, prefill: prefill, buttonStyle: style)
|
|
163
188
|
let entry = PreparedIntentRegistry.PreparedIntent(button: AnyView(result.button), createdAt: Date())
|
|
164
189
|
let handle = await PreparedIntentRegistry.shared.store(entry)
|
|
165
190
|
lastPreparedHandle = handle
|
|
@@ -183,10 +208,13 @@ final class HybridOnramperNitro: HybridOnramperNitroSpec {
|
|
|
183
208
|
func dispose() {
|
|
184
209
|
stateObservation?.cancel()
|
|
185
210
|
stateObservation = nil
|
|
211
|
+
transactionIdObservation?.cancel()
|
|
212
|
+
transactionIdObservation = nil
|
|
186
213
|
eventTask?.cancel()
|
|
187
214
|
eventTask = nil
|
|
188
215
|
onState = nil
|
|
189
216
|
onEvent = nil
|
|
217
|
+
onTransactionId = nil
|
|
190
218
|
sessionHandler = nil
|
|
191
219
|
lastPreparedHandle = nil
|
|
192
220
|
client = nil
|
|
@@ -50,6 +50,39 @@ func decodeCheckoutRequest(_ json: String) throws -> CheckoutIntentRequest {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
private struct UserPrefillJSON: Decodable {
|
|
54
|
+
let email: String?
|
|
55
|
+
let firstName: String?
|
|
56
|
+
let lastName: String?
|
|
57
|
+
let phoneNumber: String?
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// Decodes the JS `OnramperUserPrefill` JSON, or `nil` when the caller supplied
|
|
61
|
+
/// nothing (`{}`) or the payload is unusable.
|
|
62
|
+
///
|
|
63
|
+
/// Never throws. Prefill is best-effort on the SDK side and must never fail a
|
|
64
|
+
/// checkout that would otherwise succeed, so a malformed payload degrades to
|
|
65
|
+
/// "no prefill" rather than surfacing an error. `nil` for an all-empty payload
|
|
66
|
+
/// also spares a token mint the server is guaranteed to reject
|
|
67
|
+
/// (`no_fields_supplied`) — the SDK's own `hasAnyValue` check.
|
|
68
|
+
///
|
|
69
|
+
/// Only nil-ness is checked. Present-but-invalid values (a malformed phone
|
|
70
|
+
/// number, say) are passed through to the server, which is authoritative;
|
|
71
|
+
/// mirroring its validation here would drift the moment either side changed.
|
|
72
|
+
func decodeUserPrefill(_ json: String) -> OnramperUserPrefill? {
|
|
73
|
+
guard let data = json.data(using: .utf8),
|
|
74
|
+
let p = try? JSONDecoder().decode(UserPrefillJSON.self, from: data) else {
|
|
75
|
+
return nil
|
|
76
|
+
}
|
|
77
|
+
let prefill = OnramperUserPrefill(
|
|
78
|
+
email: p.email,
|
|
79
|
+
firstName: p.firstName,
|
|
80
|
+
lastName: p.lastName,
|
|
81
|
+
phoneNumber: p.phoneNumber
|
|
82
|
+
)
|
|
83
|
+
return prefill == OnramperUserPrefill() ? nil : prefill
|
|
84
|
+
}
|
|
85
|
+
|
|
53
86
|
private struct CheckoutButtonStyleJSON: Decodable {
|
|
54
87
|
let backgroundColor: String?
|
|
55
88
|
let foregroundColor: String?
|
|
@@ -19,11 +19,13 @@ class OnramperClient {
|
|
|
19
19
|
kind: 'idle'
|
|
20
20
|
};
|
|
21
21
|
lastError = null;
|
|
22
|
+
currentTransactionId = null;
|
|
22
23
|
|
|
23
24
|
// Each client owns its own native instance (and thus its own SDK client).
|
|
24
25
|
native = (0, _OnramperNative.createOnramperNative)();
|
|
25
26
|
stateListeners = new Set();
|
|
26
27
|
eventListeners = new Set();
|
|
28
|
+
transactionIdListeners = new Set();
|
|
27
29
|
|
|
28
30
|
// Resolved when the constructor-issued configure() completes. Public methods
|
|
29
31
|
// that need the native client await this first.
|
|
@@ -37,11 +39,21 @@ class OnramperClient {
|
|
|
37
39
|
for (const fn of this.stateListeners) fn(s);
|
|
38
40
|
});
|
|
39
41
|
|
|
40
|
-
// Single native checkout-event callback →
|
|
42
|
+
// Single native checkout-event callback → keep the transaction ID mirror
|
|
43
|
+
// synchronized at finalization, then fan out to checkout listeners.
|
|
41
44
|
this.native.setEventListener(json => {
|
|
42
45
|
const e = JSON.parse(json);
|
|
46
|
+
if (e.type === 'checkoutFinalized') {
|
|
47
|
+
this.updateCurrentTransactionId(e.response.onramperTransactionId);
|
|
48
|
+
}
|
|
43
49
|
for (const fn of this.eventListeners) fn(e);
|
|
44
50
|
});
|
|
51
|
+
this.native.setTransactionIdListener(transactionId => {
|
|
52
|
+
// The SDK transiently publishes nil while re-preparing after the payment
|
|
53
|
+
// sheet is dismissed. The finalized transaction ID remains durable across
|
|
54
|
+
// that attempt change; only explicit reset()/signOut() clear the JS mirror.
|
|
55
|
+
if (transactionId !== undefined) this.updateCurrentTransactionId(transactionId);
|
|
56
|
+
});
|
|
45
57
|
|
|
46
58
|
// The SDK calls this when its session expires; return fresh credentials.
|
|
47
59
|
// Nitro stores the async callback natively and awaits it directly — no
|
|
@@ -68,6 +80,17 @@ class OnramperClient {
|
|
|
68
80
|
// before calling initialize(). The error still surfaces via initialize().
|
|
69
81
|
this.configured.catch(() => undefined);
|
|
70
82
|
}
|
|
83
|
+
updateCurrentTransactionId(next) {
|
|
84
|
+
if (next === this.currentTransactionId) return;
|
|
85
|
+
this.currentTransactionId = next;
|
|
86
|
+
for (const fn of [...this.transactionIdListeners]) {
|
|
87
|
+
try {
|
|
88
|
+
fn(next);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error('Onramper transaction ID listener threw:', error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
71
94
|
async initialize(creds) {
|
|
72
95
|
try {
|
|
73
96
|
await this.configured;
|
|
@@ -80,6 +103,7 @@ class OnramperClient {
|
|
|
80
103
|
try {
|
|
81
104
|
await this.configured;
|
|
82
105
|
await this.native.reset();
|
|
106
|
+
this.updateCurrentTransactionId(null);
|
|
83
107
|
} catch (e) {
|
|
84
108
|
throw _errors.OnramperError.from(e);
|
|
85
109
|
}
|
|
@@ -95,6 +119,7 @@ class OnramperClient {
|
|
|
95
119
|
try {
|
|
96
120
|
await this.configured;
|
|
97
121
|
await this.native.signOut();
|
|
122
|
+
this.updateCurrentTransactionId(null);
|
|
98
123
|
} catch (e) {
|
|
99
124
|
throw _errors.OnramperError.from(e);
|
|
100
125
|
}
|
|
@@ -104,11 +129,21 @@ class OnramperClient {
|
|
|
104
129
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
105
130
|
* to render plus the quote. The button handles login / finalize / webview
|
|
106
131
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
132
|
+
*
|
|
133
|
+
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
134
|
+
* screens with values you already know about the user. It is best-effort and
|
|
135
|
+
* never blocks sign-in — there is no error to handle. Note the caveat on
|
|
136
|
+
* `OnramperUserPrefill.email` before supplying it.
|
|
137
|
+
*
|
|
138
|
+
* `prefill` trails `buttonStyle` here, unlike the Swift
|
|
139
|
+
* `getCheckoutRequirements(_:prefill:buttonStyle:)` where argument labels make
|
|
140
|
+
* the middle position free: appending it keeps every existing JS call site
|
|
141
|
+
* working unchanged.
|
|
107
142
|
*/
|
|
108
|
-
async getCheckoutRequirements(request, buttonStyle = {}) {
|
|
143
|
+
async getCheckoutRequirements(request, buttonStyle = {}, prefill = {}) {
|
|
109
144
|
try {
|
|
110
145
|
await this.configured;
|
|
111
|
-
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(buttonStyle));
|
|
146
|
+
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(prefill), JSON.stringify(buttonStyle));
|
|
112
147
|
const quote = JSON.parse(result.quoteJson);
|
|
113
148
|
const button = /*#__PURE__*/(0, _react.createElement)(_OnramperCheckoutButtonView.OnramperCheckoutButtonView, {
|
|
114
149
|
intentHandle: result.intentHandle,
|
|
@@ -139,6 +174,14 @@ class OnramperClient {
|
|
|
139
174
|
};
|
|
140
175
|
}
|
|
141
176
|
|
|
177
|
+
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
178
|
+
addTransactionIdListener(fn) {
|
|
179
|
+
this.transactionIdListeners.add(fn);
|
|
180
|
+
return () => {
|
|
181
|
+
this.transactionIdListeners.delete(fn);
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
142
185
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
143
186
|
addEventListener(name, fn) {
|
|
144
187
|
const wrapper = e => {
|
|
@@ -154,6 +197,7 @@ class OnramperClient {
|
|
|
154
197
|
destroy() {
|
|
155
198
|
this.stateListeners.clear();
|
|
156
199
|
this.eventListeners.clear();
|
|
200
|
+
this.transactionIdListeners.clear();
|
|
157
201
|
this.native.dispose();
|
|
158
202
|
}
|
|
159
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_OnramperCheckoutButtonView","_OnramperNative","_errors","OnramperClient","state","kind","lastError","native","createOnramperNative","stateListeners","Set","eventListeners","constructor","config","setStateListener","json","s","JSON","parse","OnramperError","from","error","fn","setEventListener","e","setSessionExpirationHandler","creds","onSessionExpired","sessionId","sessionToken","configured","configure","apiKey","clientId","environment","theme","logLevel","catch","err","
|
|
1
|
+
{"version":3,"names":["_react","require","_OnramperCheckoutButtonView","_OnramperNative","_errors","OnramperClient","state","kind","lastError","currentTransactionId","native","createOnramperNative","stateListeners","Set","eventListeners","transactionIdListeners","constructor","config","setStateListener","json","s","JSON","parse","OnramperError","from","error","fn","setEventListener","e","type","updateCurrentTransactionId","response","onramperTransactionId","setTransactionIdListener","transactionId","undefined","setSessionExpirationHandler","creds","onSessionExpired","sessionId","sessionToken","configured","configure","apiKey","clientId","environment","theme","logLevel","catch","err","next","console","initialize","reset","signOut","getCheckoutRequirements","request","buttonStyle","prefill","result","stringify","quote","quoteJson","button","createElement","OnramperCheckoutButtonView","intentHandle","style","width","minHeight","cancelPreparedIntent","addStateListener","add","delete","addTransactionIdListener","addEventListener","name","wrapper","destroy","clear","dispose","exports"],"sourceRoot":"../../src","sources":["OnramperClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,11 +15,13 @@ export class OnramperClient {
|
|
|
15
15
|
kind: 'idle'
|
|
16
16
|
};
|
|
17
17
|
lastError = null;
|
|
18
|
+
currentTransactionId = null;
|
|
18
19
|
|
|
19
20
|
// Each client owns its own native instance (and thus its own SDK client).
|
|
20
21
|
native = createOnramperNative();
|
|
21
22
|
stateListeners = new Set();
|
|
22
23
|
eventListeners = new Set();
|
|
24
|
+
transactionIdListeners = new Set();
|
|
23
25
|
|
|
24
26
|
// Resolved when the constructor-issued configure() completes. Public methods
|
|
25
27
|
// that need the native client await this first.
|
|
@@ -33,11 +35,21 @@ export class OnramperClient {
|
|
|
33
35
|
for (const fn of this.stateListeners) fn(s);
|
|
34
36
|
});
|
|
35
37
|
|
|
36
|
-
// Single native checkout-event callback →
|
|
38
|
+
// Single native checkout-event callback → keep the transaction ID mirror
|
|
39
|
+
// synchronized at finalization, then fan out to checkout listeners.
|
|
37
40
|
this.native.setEventListener(json => {
|
|
38
41
|
const e = JSON.parse(json);
|
|
42
|
+
if (e.type === 'checkoutFinalized') {
|
|
43
|
+
this.updateCurrentTransactionId(e.response.onramperTransactionId);
|
|
44
|
+
}
|
|
39
45
|
for (const fn of this.eventListeners) fn(e);
|
|
40
46
|
});
|
|
47
|
+
this.native.setTransactionIdListener(transactionId => {
|
|
48
|
+
// The SDK transiently publishes nil while re-preparing after the payment
|
|
49
|
+
// sheet is dismissed. The finalized transaction ID remains durable across
|
|
50
|
+
// that attempt change; only explicit reset()/signOut() clear the JS mirror.
|
|
51
|
+
if (transactionId !== undefined) this.updateCurrentTransactionId(transactionId);
|
|
52
|
+
});
|
|
41
53
|
|
|
42
54
|
// The SDK calls this when its session expires; return fresh credentials.
|
|
43
55
|
// Nitro stores the async callback natively and awaits it directly — no
|
|
@@ -64,6 +76,17 @@ export class OnramperClient {
|
|
|
64
76
|
// before calling initialize(). The error still surfaces via initialize().
|
|
65
77
|
this.configured.catch(() => undefined);
|
|
66
78
|
}
|
|
79
|
+
updateCurrentTransactionId(next) {
|
|
80
|
+
if (next === this.currentTransactionId) return;
|
|
81
|
+
this.currentTransactionId = next;
|
|
82
|
+
for (const fn of [...this.transactionIdListeners]) {
|
|
83
|
+
try {
|
|
84
|
+
fn(next);
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.error('Onramper transaction ID listener threw:', error);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
67
90
|
async initialize(creds) {
|
|
68
91
|
try {
|
|
69
92
|
await this.configured;
|
|
@@ -76,6 +99,7 @@ export class OnramperClient {
|
|
|
76
99
|
try {
|
|
77
100
|
await this.configured;
|
|
78
101
|
await this.native.reset();
|
|
102
|
+
this.updateCurrentTransactionId(null);
|
|
79
103
|
} catch (e) {
|
|
80
104
|
throw OnramperError.from(e);
|
|
81
105
|
}
|
|
@@ -91,6 +115,7 @@ export class OnramperClient {
|
|
|
91
115
|
try {
|
|
92
116
|
await this.configured;
|
|
93
117
|
await this.native.signOut();
|
|
118
|
+
this.updateCurrentTransactionId(null);
|
|
94
119
|
} catch (e) {
|
|
95
120
|
throw OnramperError.from(e);
|
|
96
121
|
}
|
|
@@ -100,11 +125,21 @@ export class OnramperClient {
|
|
|
100
125
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
101
126
|
* to render plus the quote. The button handles login / finalize / webview
|
|
102
127
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
128
|
+
*
|
|
129
|
+
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
130
|
+
* screens with values you already know about the user. It is best-effort and
|
|
131
|
+
* never blocks sign-in — there is no error to handle. Note the caveat on
|
|
132
|
+
* `OnramperUserPrefill.email` before supplying it.
|
|
133
|
+
*
|
|
134
|
+
* `prefill` trails `buttonStyle` here, unlike the Swift
|
|
135
|
+
* `getCheckoutRequirements(_:prefill:buttonStyle:)` where argument labels make
|
|
136
|
+
* the middle position free: appending it keeps every existing JS call site
|
|
137
|
+
* working unchanged.
|
|
103
138
|
*/
|
|
104
|
-
async getCheckoutRequirements(request, buttonStyle = {}) {
|
|
139
|
+
async getCheckoutRequirements(request, buttonStyle = {}, prefill = {}) {
|
|
105
140
|
try {
|
|
106
141
|
await this.configured;
|
|
107
|
-
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(buttonStyle));
|
|
142
|
+
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(prefill), JSON.stringify(buttonStyle));
|
|
108
143
|
const quote = JSON.parse(result.quoteJson);
|
|
109
144
|
const button = /*#__PURE__*/createElement(OnramperCheckoutButtonView, {
|
|
110
145
|
intentHandle: result.intentHandle,
|
|
@@ -135,6 +170,14 @@ export class OnramperClient {
|
|
|
135
170
|
};
|
|
136
171
|
}
|
|
137
172
|
|
|
173
|
+
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
174
|
+
addTransactionIdListener(fn) {
|
|
175
|
+
this.transactionIdListeners.add(fn);
|
|
176
|
+
return () => {
|
|
177
|
+
this.transactionIdListeners.delete(fn);
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
138
181
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
139
182
|
addEventListener(name, fn) {
|
|
140
183
|
const wrapper = e => {
|
|
@@ -150,6 +193,7 @@ export class OnramperClient {
|
|
|
150
193
|
destroy() {
|
|
151
194
|
this.stateListeners.clear();
|
|
152
195
|
this.eventListeners.clear();
|
|
196
|
+
this.transactionIdListeners.clear();
|
|
153
197
|
this.native.dispose();
|
|
154
198
|
}
|
|
155
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createElement","OnramperCheckoutButtonView","createOnramperNative","OnramperError","OnramperClient","state","kind","lastError","native","stateListeners","Set","eventListeners","constructor","config","setStateListener","json","s","JSON","parse","from","error","fn","setEventListener","e","setSessionExpirationHandler","creds","onSessionExpired","sessionId","sessionToken","configured","configure","apiKey","clientId","environment","theme","logLevel","catch","err","
|
|
1
|
+
{"version":3,"names":["createElement","OnramperCheckoutButtonView","createOnramperNative","OnramperError","OnramperClient","state","kind","lastError","currentTransactionId","native","stateListeners","Set","eventListeners","transactionIdListeners","constructor","config","setStateListener","json","s","JSON","parse","from","error","fn","setEventListener","e","type","updateCurrentTransactionId","response","onramperTransactionId","setTransactionIdListener","transactionId","undefined","setSessionExpirationHandler","creds","onSessionExpired","sessionId","sessionToken","configured","configure","apiKey","clientId","environment","theme","logLevel","catch","err","next","console","initialize","reset","signOut","getCheckoutRequirements","request","buttonStyle","prefill","result","stringify","quote","quoteJson","button","intentHandle","style","width","minHeight","cancelPreparedIntent","addStateListener","add","delete","addTransactionIdListener","addEventListener","name","wrapper","destroy","clear","dispose"],"sourceRoot":"../../src","sources":["OnramperClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactElement } from 'react';
|
|
2
2
|
import { OnramperError } from './errors';
|
|
3
3
|
import type { EventName, EventPayload } from './events';
|
|
4
|
-
import type { CheckoutButtonStyle, CheckoutRequest, OnramperConfiguration, OnramperState, QuoteResponse, SessionCredentials } from './types';
|
|
4
|
+
import type { CheckoutButtonStyle, CheckoutRequest, OnramperConfiguration, OnramperState, OnramperUserPrefill, QuoteResponse, SessionCredentials } from './types';
|
|
5
5
|
export interface GetCheckoutRequirementsResult {
|
|
6
6
|
/** A native checkout button element to render. Tapping it drives login, finalize, and the payment webview internally. */
|
|
7
7
|
button: ReactElement;
|
|
@@ -17,11 +17,14 @@ export interface GetCheckoutRequirementsResult {
|
|
|
17
17
|
export declare class OnramperClient {
|
|
18
18
|
state: OnramperState;
|
|
19
19
|
lastError: OnramperError | null;
|
|
20
|
+
currentTransactionId: string | null;
|
|
20
21
|
private readonly native;
|
|
21
22
|
private readonly stateListeners;
|
|
22
23
|
private readonly eventListeners;
|
|
24
|
+
private readonly transactionIdListeners;
|
|
23
25
|
private readonly configured;
|
|
24
26
|
constructor(config: OnramperConfiguration);
|
|
27
|
+
private updateCurrentTransactionId;
|
|
25
28
|
initialize(creds: SessionCredentials): Promise<void>;
|
|
26
29
|
reset(): Promise<void>;
|
|
27
30
|
/**
|
|
@@ -35,12 +38,24 @@ export declare class OnramperClient {
|
|
|
35
38
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
36
39
|
* to render plus the quote. The button handles login / finalize / webview
|
|
37
40
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
41
|
+
*
|
|
42
|
+
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
43
|
+
* screens with values you already know about the user. It is best-effort and
|
|
44
|
+
* never blocks sign-in — there is no error to handle. Note the caveat on
|
|
45
|
+
* `OnramperUserPrefill.email` before supplying it.
|
|
46
|
+
*
|
|
47
|
+
* `prefill` trails `buttonStyle` here, unlike the Swift
|
|
48
|
+
* `getCheckoutRequirements(_:prefill:buttonStyle:)` where argument labels make
|
|
49
|
+
* the middle position free: appending it keeps every existing JS call site
|
|
50
|
+
* working unchanged.
|
|
38
51
|
*/
|
|
39
|
-
getCheckoutRequirements(request: CheckoutRequest, buttonStyle?: CheckoutButtonStyle): Promise<GetCheckoutRequirementsResult>;
|
|
52
|
+
getCheckoutRequirements(request: CheckoutRequest, buttonStyle?: CheckoutButtonStyle, prefill?: OnramperUserPrefill): Promise<GetCheckoutRequirementsResult>;
|
|
40
53
|
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
41
54
|
cancelPreparedIntent(intentHandle: string): Promise<void>;
|
|
42
55
|
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
43
56
|
addStateListener(fn: (state: OnramperState) => void): () => void;
|
|
57
|
+
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
58
|
+
addTransactionIdListener(fn: (transactionId: string | null) => void): () => void;
|
|
44
59
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
45
60
|
addEventListener<K extends EventName>(name: K, fn: (e: EventPayload<K>) => void): () => void;
|
|
46
61
|
/** Tear down: clears JS listeners and releases the native callbacks + SDK client. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnramperClient.d.ts","sourceRoot":"","sources":["../../../../src/OnramperClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,OAAO,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAiB,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,yHAAyH;IACzH,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,aAAa,CAAoB;IACxC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;
|
|
1
|
+
{"version":3,"file":"OnramperClient.d.ts","sourceRoot":"","sources":["../../../../src/OnramperClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,OAAO,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAiB,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,yHAAyH;IACzH,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,aAAa,CAAoB;IACxC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;IACvC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IAEjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqD;IAI5F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAE/B,MAAM,EAAE,qBAAqB;IAoDzC,OAAO,CAAC,0BAA0B;IAa5B,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;;;;;;;;;;;;;OAcG;IACG,uBAAuB,CAC3B,OAAO,EAAE,eAAe,EACxB,WAAW,GAAE,mBAAwB,EACrC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,6BAA6B,CAAC;IAmBzC,oFAAoF;IACpF,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAOhE,+FAA+F;IAC/F,wBAAwB,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAOhF,+EAA+E;IAC/E,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAU5F,qFAAqF;IACrF,OAAO,IAAI,IAAI;CAMhB"}
|
|
@@ -4,6 +4,6 @@ export { OnramperCheckoutButtonView } from './OnramperCheckoutButtonView';
|
|
|
4
4
|
export type { OnramperCheckoutButtonViewProps } from './OnramperCheckoutButtonView';
|
|
5
5
|
export { OnramperError } from './errors';
|
|
6
6
|
export type { OnramperErrorCode, OnramperErrorPayload } from './errors';
|
|
7
|
-
export type { CheckoutButtonStyle, CheckoutFinalizeResponse, CheckoutRequest, CheckoutPaymentType, CheckoutRequirement, HeadlessCheckoutData, OnramperConfiguration, OnramperEnvironment, OnramperLogLevel, OnramperState, OnramperTheme, QuoteResponse, RenderType, ReverificationField, SessionCredentials, ToSItem, TransactionType, UserInfoField, UserInfoFieldType, WalletInfo, } from './types';
|
|
7
|
+
export type { CheckoutButtonStyle, CheckoutFinalizeResponse, CheckoutRequest, CheckoutPaymentType, CheckoutRequirement, HeadlessCheckoutData, OnramperConfiguration, OnramperEnvironment, OnramperLogLevel, OnramperState, OnramperTheme, OnramperUserPrefill, QuoteResponse, RenderType, ReverificationField, SessionCredentials, ToSItem, TransactionType, UserInfoField, UserInfoFieldType, WalletInfo, } from './types';
|
|
8
8
|
export type { CheckoutEvent, EventName, EventPayload } from './events';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,YAAY,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,OAAO,EACP,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,YAAY,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,OAAO,EACP,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -30,10 +30,11 @@ export interface OnramperNitro extends HybridObject<{
|
|
|
30
30
|
initialize(sessionId: string, sessionToken: string): Promise<void>;
|
|
31
31
|
reset(): Promise<void>;
|
|
32
32
|
signOut(): Promise<void>;
|
|
33
|
-
getCheckoutRequirements(requestJson: string, styleJson: string): Promise<PreparedIntentResult>;
|
|
33
|
+
getCheckoutRequirements(requestJson: string, prefillJson: string, styleJson: string): Promise<PreparedIntentResult>;
|
|
34
34
|
cancelPreparedIntent(intentHandle: string): Promise<void>;
|
|
35
35
|
setStateListener(onState: (stateJson: string) => void): void;
|
|
36
36
|
setEventListener(onEvent: (eventJson: string) => void): void;
|
|
37
|
+
setTransactionIdListener(onTransactionId: (transactionId: string | undefined) => void): void;
|
|
37
38
|
setSessionExpirationHandler(handler: () => Promise<NitroSessionCredentials>): void;
|
|
38
39
|
}
|
|
39
40
|
//# sourceMappingURL=OnramperNitro.nitro.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnramperNitro.nitro.d.ts","sourceRoot":"","sources":["../../../../../src/specs/OnramperNitro.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;IACnE,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"OnramperNitro.nitro.d.ts","sourceRoot":"","sources":["../../../../../src/specs/OnramperNitro.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;IACnE,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IASzB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpH,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG1D,gBAAgB,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7D,gBAAgB,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAE7D,wBAAwB,CAAC,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC;IAI7F,2BAA2B,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC;CAKpF"}
|
|
@@ -49,6 +49,13 @@ export interface QuoteResponse {
|
|
|
49
49
|
transactionFee: number;
|
|
50
50
|
recommendations?: string[];
|
|
51
51
|
}
|
|
52
|
+
export interface OnramperUserPrefill {
|
|
53
|
+
email?: string;
|
|
54
|
+
firstName?: string;
|
|
55
|
+
lastName?: string;
|
|
56
|
+
/** E.164 format, e.g. `+3712345678`. Always a candidate — the user still verifies it. */
|
|
57
|
+
phoneNumber?: string;
|
|
58
|
+
}
|
|
52
59
|
export interface CheckoutButtonStyle {
|
|
53
60
|
backgroundColor?: string;
|
|
54
61
|
foregroundColor?: string;
|
|
@@ -63,6 +70,8 @@ export interface HeadlessCheckoutData {
|
|
|
63
70
|
}
|
|
64
71
|
export interface CheckoutFinalizeResponse {
|
|
65
72
|
headlessCheckoutId: string;
|
|
73
|
+
/** Durable Onramper transaction identifier for support, reconciliation, and status lookups. */
|
|
74
|
+
onramperTransactionId: string;
|
|
66
75
|
headlessCheckoutData: HeadlessCheckoutData;
|
|
67
76
|
}
|
|
68
77
|
export type CheckoutRequirement = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactElement } from 'react';
|
|
2
2
|
import { OnramperError } from './errors.js';
|
|
3
3
|
import type { EventName, EventPayload } from './events.js';
|
|
4
|
-
import type { CheckoutButtonStyle, CheckoutRequest, OnramperConfiguration, OnramperState, QuoteResponse, SessionCredentials } from './types.js';
|
|
4
|
+
import type { CheckoutButtonStyle, CheckoutRequest, OnramperConfiguration, OnramperState, OnramperUserPrefill, QuoteResponse, SessionCredentials } from './types.js';
|
|
5
5
|
export interface GetCheckoutRequirementsResult {
|
|
6
6
|
/** A native checkout button element to render. Tapping it drives login, finalize, and the payment webview internally. */
|
|
7
7
|
button: ReactElement;
|
|
@@ -17,11 +17,14 @@ export interface GetCheckoutRequirementsResult {
|
|
|
17
17
|
export declare class OnramperClient {
|
|
18
18
|
state: OnramperState;
|
|
19
19
|
lastError: OnramperError | null;
|
|
20
|
+
currentTransactionId: string | null;
|
|
20
21
|
private readonly native;
|
|
21
22
|
private readonly stateListeners;
|
|
22
23
|
private readonly eventListeners;
|
|
24
|
+
private readonly transactionIdListeners;
|
|
23
25
|
private readonly configured;
|
|
24
26
|
constructor(config: OnramperConfiguration);
|
|
27
|
+
private updateCurrentTransactionId;
|
|
25
28
|
initialize(creds: SessionCredentials): Promise<void>;
|
|
26
29
|
reset(): Promise<void>;
|
|
27
30
|
/**
|
|
@@ -35,12 +38,24 @@ export declare class OnramperClient {
|
|
|
35
38
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
36
39
|
* to render plus the quote. The button handles login / finalize / webview
|
|
37
40
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
41
|
+
*
|
|
42
|
+
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
43
|
+
* screens with values you already know about the user. It is best-effort and
|
|
44
|
+
* never blocks sign-in — there is no error to handle. Note the caveat on
|
|
45
|
+
* `OnramperUserPrefill.email` before supplying it.
|
|
46
|
+
*
|
|
47
|
+
* `prefill` trails `buttonStyle` here, unlike the Swift
|
|
48
|
+
* `getCheckoutRequirements(_:prefill:buttonStyle:)` where argument labels make
|
|
49
|
+
* the middle position free: appending it keeps every existing JS call site
|
|
50
|
+
* working unchanged.
|
|
38
51
|
*/
|
|
39
|
-
getCheckoutRequirements(request: CheckoutRequest, buttonStyle?: CheckoutButtonStyle): Promise<GetCheckoutRequirementsResult>;
|
|
52
|
+
getCheckoutRequirements(request: CheckoutRequest, buttonStyle?: CheckoutButtonStyle, prefill?: OnramperUserPrefill): Promise<GetCheckoutRequirementsResult>;
|
|
40
53
|
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
41
54
|
cancelPreparedIntent(intentHandle: string): Promise<void>;
|
|
42
55
|
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
43
56
|
addStateListener(fn: (state: OnramperState) => void): () => void;
|
|
57
|
+
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
58
|
+
addTransactionIdListener(fn: (transactionId: string | null) => void): () => void;
|
|
44
59
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
45
60
|
addEventListener<K extends EventName>(name: K, fn: (e: EventPayload<K>) => void): () => void;
|
|
46
61
|
/** Tear down: clears JS listeners and releases the native callbacks + SDK client. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnramperClient.d.ts","sourceRoot":"","sources":["../../../../src/OnramperClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,OAAO,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAU,CAAC;AACzC,OAAO,KAAK,EAAiB,SAAS,EAAE,YAAY,EAAE,MAAM,aAAU,CAAC;AACvE,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,yHAAyH;IACzH,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,aAAa,CAAoB;IACxC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;
|
|
1
|
+
{"version":3,"file":"OnramperClient.d.ts","sourceRoot":"","sources":["../../../../src/OnramperClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,OAAO,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAU,CAAC;AACzC,OAAO,KAAK,EAAiB,SAAS,EAAE,YAAY,EAAE,MAAM,aAAU,CAAC;AACvE,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,yHAAyH;IACzH,MAAM,EAAE,YAAY,CAAC;IACrB,wEAAwE;IACxE,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,aAAa,CAAoB;IACxC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;IACvC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IAEjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqD;IAI5F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAE/B,MAAM,EAAE,qBAAqB;IAoDzC,OAAO,CAAC,0BAA0B;IAa5B,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;;;;;;;;;;;;;OAcG;IACG,uBAAuB,CAC3B,OAAO,EAAE,eAAe,EACxB,WAAW,GAAE,mBAAwB,EACrC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,6BAA6B,CAAC;IAmBzC,oFAAoF;IACpF,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAOhE,+FAA+F;IAC/F,wBAAwB,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAOhF,+EAA+E;IAC/E,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAU5F,qFAAqF;IACrF,OAAO,IAAI,IAAI;CAMhB"}
|