@onramper/onramper-react-native 1.2.2 → 1.3.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 +249 -0
- package/README.md +64 -4
- 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 +110 -4
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/OnramperSDK +0 -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 +3562 -2684
- 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 +110 -4
- 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 +110 -4
- 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/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 +3562 -2684
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/OnramperSDK.yml +3525 -2651
- package/ios/HybridOnramperCheckoutButton.swift +77 -3
- package/ios/HybridOnramperNitro.swift +142 -78
- package/ios/OnramperSDKBridge.swift +19 -2
- package/ios/PreparedIntentRegistry.swift +124 -6
- package/ios/SDKLogRelay.swift +41 -0
- package/lib/commonjs/CheckoutButton.js +34 -0
- package/lib/commonjs/CheckoutButton.js.map +1 -0
- package/lib/commonjs/OnramperClient.js +81 -12
- package/lib/commonjs/OnramperClient.js.map +1 -1
- package/lib/commonjs/errors.js +19 -5
- package/lib/commonjs/errors.js.map +1 -1
- package/lib/commonjs/generated/OnramperCheckoutButtonConfig.json +1 -0
- package/lib/module/CheckoutButton.js +30 -0
- package/lib/module/CheckoutButton.js.map +1 -0
- package/lib/module/OnramperClient.js +81 -12
- package/lib/module/OnramperClient.js.map +1 -1
- package/lib/module/errors.js +19 -5
- package/lib/module/errors.js.map +1 -1
- package/lib/module/generated/OnramperCheckoutButtonConfig.json +1 -0
- package/lib/typescript/commonjs/src/CheckoutButton.d.ts +20 -0
- package/lib/typescript/commonjs/src/CheckoutButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/OnramperClient.d.ts +10 -1
- package/lib/typescript/commonjs/src/OnramperClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/errors.d.ts +6 -1
- package/lib/typescript/commonjs/src/errors.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/events.d.ts +10 -0
- package/lib/typescript/commonjs/src/events.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/OnramperCheckoutButton.nitro.d.ts +6 -0
- package/lib/typescript/commonjs/src/specs/OnramperCheckoutButton.nitro.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/specs/OnramperNitro.nitro.d.ts +4 -0
- package/lib/typescript/commonjs/src/specs/OnramperNitro.nitro.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types.d.ts +32 -3
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -1
- package/lib/typescript/module/src/CheckoutButton.d.ts +20 -0
- package/lib/typescript/module/src/CheckoutButton.d.ts.map +1 -0
- package/lib/typescript/module/src/OnramperClient.d.ts +10 -1
- package/lib/typescript/module/src/OnramperClient.d.ts.map +1 -1
- package/lib/typescript/module/src/errors.d.ts +6 -1
- package/lib/typescript/module/src/errors.d.ts.map +1 -1
- package/lib/typescript/module/src/events.d.ts +10 -0
- package/lib/typescript/module/src/events.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/OnramperCheckoutButton.nitro.d.ts +6 -0
- package/lib/typescript/module/src/specs/OnramperCheckoutButton.nitro.d.ts.map +1 -1
- package/lib/typescript/module/src/specs/OnramperNitro.nitro.d.ts +4 -0
- package/lib/typescript/module/src/specs/OnramperNitro.nitro.d.ts.map +1 -1
- package/lib/typescript/module/src/types.d.ts +32 -3
- package/lib/typescript/module/src/types.d.ts.map +1 -1
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.cpp +11 -3
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.hpp +44 -7
- package/nitrogen/generated/ios/c++/HybridOnramperCheckoutButtonSpecSwift.hpp +9 -0
- package/nitrogen/generated/ios/c++/HybridOnramperNitroSpecSwift.hpp +11 -2
- package/nitrogen/generated/ios/c++/views/HybridOnramperCheckoutButtonComponent.mm +5 -0
- package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +5 -5
- package/nitrogen/generated/ios/swift/HybridOnramperCheckoutButtonSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridOnramperCheckoutButtonSpec_cxx.swift +32 -0
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec.swift +2 -1
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec_cxx.swift +32 -11
- package/nitrogen/generated/ios/swift/OnramperNitroConfig.swift +16 -6
- package/nitrogen/generated/shared/c++/HybridOnramperCheckoutButtonSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridOnramperCheckoutButtonSpec.hpp +4 -0
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.hpp +3 -2
- package/nitrogen/generated/shared/c++/OnramperNitroConfig.hpp +10 -2
- package/nitrogen/generated/shared/c++/views/HybridOnramperCheckoutButtonComponent.cpp +11 -0
- package/nitrogen/generated/shared/c++/views/HybridOnramperCheckoutButtonComponent.hpp +3 -2
- package/nitrogen/generated/shared/json/OnramperCheckoutButtonConfig.json +1 -0
- package/package.json +5 -2
- package/src/CheckoutButton.ts +28 -0
- package/src/OnramperClient.ts +82 -9
- package/src/errors.ts +29 -6
- package/src/events.ts +5 -0
- package/src/generated/OnramperCheckoutButtonConfig.json +1 -0
- package/src/index.ts +3 -0
- package/src/specs/OnramperCheckoutButton.nitro.ts +6 -0
- package/src/specs/OnramperNitro.nitro.ts +5 -0
- package/src/types.ts +36 -3
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import NitroModules
|
|
3
|
+
import OnramperSDK
|
|
4
|
+
|
|
5
|
+
/// The SDK can emit records from any thread. Keep callback registration and
|
|
6
|
+
/// teardown synchronized; invoke outside the lock (Nitro schedules delivery).
|
|
7
|
+
final class SDKLogRelay: @unchecked Sendable {
|
|
8
|
+
private let lock = NSLock()
|
|
9
|
+
private var listener: ((String) -> Void)?
|
|
10
|
+
|
|
11
|
+
func setListener(_ listener: ((String) -> Void)?) {
|
|
12
|
+
lock.lock()
|
|
13
|
+
self.listener = listener
|
|
14
|
+
lock.unlock()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
func emit(_ record: OnramperLogRecord) {
|
|
18
|
+
lock.lock()
|
|
19
|
+
let callback = listener
|
|
20
|
+
lock.unlock()
|
|
21
|
+
guard let callback else { return }
|
|
22
|
+
callback(jsonString([
|
|
23
|
+
"timestamp": record.timestamp.timeIntervalSince1970 * 1000,
|
|
24
|
+
"level": String(describing: record.level),
|
|
25
|
+
"category": record.category,
|
|
26
|
+
"event": record.event,
|
|
27
|
+
"context": record.context,
|
|
28
|
+
"message": record.message,
|
|
29
|
+
]))
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Nitro otherwise converts a Swift error to a message-only JavaScript Error.
|
|
34
|
+
/// Both failed events and rejected operations must carry the SDK's safe copy.
|
|
35
|
+
func bridgeSDKError(_ error: Error) -> Error {
|
|
36
|
+
if let lifecycleError = error as? BridgeLifecycleError {
|
|
37
|
+
return RuntimeError.error(withMessage: "ONRAMPER_ERROR:" + jsonString(lifecycleError.payload))
|
|
38
|
+
}
|
|
39
|
+
guard let sdkError = error as? OnramperError else { return error }
|
|
40
|
+
return RuntimeError.error(withMessage: "ONRAMPER_ERROR:" + jsonString(sdkError.toJSDict()))
|
|
41
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CHECKOUT_BUTTON_FALLBACK_HEIGHT = void 0;
|
|
7
|
+
exports.CheckoutButton = CheckoutButton;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
10
|
+
var _OnramperCheckoutButtonView = require("./OnramperCheckoutButtonView.js");
|
|
11
|
+
// Height of the bare Buy button. Used until native reports the measured content
|
|
12
|
+
// height so the first frame isn't collapsed.
|
|
13
|
+
const CHECKOUT_BUTTON_FALLBACK_HEIGHT = exports.CHECKOUT_BUTTON_FALLBACK_HEIGHT = 56;
|
|
14
|
+
/**
|
|
15
|
+
* Sizes the native checkout button to its SwiftUI content. The content grows when
|
|
16
|
+
* the SDK shows ToS text under the Buy button (which can change after mount), and
|
|
17
|
+
* Yoga can't measure a SwiftUI view — so native reports the height and it is
|
|
18
|
+
* applied here as an explicit `height`.
|
|
19
|
+
*/
|
|
20
|
+
function CheckoutButton({
|
|
21
|
+
intentHandle
|
|
22
|
+
}) {
|
|
23
|
+
const [height, setHeight] = (0, _react.useState)(null);
|
|
24
|
+
const onContentHeightChange = (0, _react.useMemo)(() => (0, _reactNativeNitroModules.callback)(h => setHeight(Math.ceil(h))), []);
|
|
25
|
+
return /*#__PURE__*/(0, _react.createElement)(_OnramperCheckoutButtonView.OnramperCheckoutButtonView, {
|
|
26
|
+
intentHandle,
|
|
27
|
+
onContentHeightChange,
|
|
28
|
+
style: {
|
|
29
|
+
width: '100%',
|
|
30
|
+
height: height ?? CHECKOUT_BUTTON_FALLBACK_HEIGHT
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=CheckoutButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeNitroModules","_OnramperCheckoutButtonView","CHECKOUT_BUTTON_FALLBACK_HEIGHT","exports","CheckoutButton","intentHandle","height","setHeight","useState","onContentHeightChange","useMemo","callback","h","Math","ceil","createElement","OnramperCheckoutButtonView","style","width"],"sourceRoot":"../../src","sources":["CheckoutButton.ts"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAEA,IAAAE,2BAAA,GAAAF,OAAA;AAEA;AACA;AACO,MAAMG,+BAA+B,GAAAC,OAAA,CAAAD,+BAAA,GAAG,EAAE;AAMjD;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,cAAcA,CAAC;EAAEC;AAAkC,CAAC,EAAE;EACpE,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAC,eAAQ,EAAgB,IAAI,CAAC;EACzD,MAAMC,qBAAqB,GAAG,IAAAC,cAAO,EAAC,MAAM,IAAAC,iCAAQ,EAAEC,CAAS,IAAKL,SAAS,CAACM,IAAI,CAACC,IAAI,CAACF,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACjG,oBAAO,IAAAG,oBAAa,EAACC,sDAA0B,EAAE;IAC/CX,YAAY;IACZI,qBAAqB;IACrBQ,KAAK,EAAE;MAAEC,KAAK,EAAE,MAAM;MAAEZ,MAAM,EAAEA,MAAM,IAAIJ;IAAgC;EAC5E,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.OnramperClient = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
var
|
|
8
|
+
var _CheckoutButton = require("./CheckoutButton.js");
|
|
9
9
|
var _OnramperNative = require("./OnramperNative.js");
|
|
10
10
|
var _errors = require("./errors.js");
|
|
11
11
|
/**
|
|
@@ -15,6 +15,18 @@ var _errors = require("./errors.js");
|
|
|
15
15
|
* unions, then fanned out to any number of listeners.
|
|
16
16
|
*/
|
|
17
17
|
class OnramperClient {
|
|
18
|
+
/**
|
|
19
|
+
* Version of the native Onramper iOS SDK loaded by this app (not the RN
|
|
20
|
+
* package version). No client configuration or session is required. iOS only.
|
|
21
|
+
*/
|
|
22
|
+
static get sdkVersion() {
|
|
23
|
+
const native = (0, _OnramperNative.createOnramperNative)();
|
|
24
|
+
try {
|
|
25
|
+
return native.sdkVersion;
|
|
26
|
+
} finally {
|
|
27
|
+
native.dispose();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
18
30
|
state = {
|
|
19
31
|
kind: 'idle'
|
|
20
32
|
};
|
|
@@ -30,9 +42,23 @@ class OnramperClient {
|
|
|
30
42
|
// Resolved when the constructor-issued configure() completes. Public methods
|
|
31
43
|
// that need the native client await this first.
|
|
32
44
|
|
|
45
|
+
destroyed = false;
|
|
33
46
|
constructor(config) {
|
|
47
|
+
if (config.logHandler) {
|
|
48
|
+
const handler = config.logHandler;
|
|
49
|
+
this.native.setLogListener(json => {
|
|
50
|
+
if (this.destroyed) return;
|
|
51
|
+
try {
|
|
52
|
+
handler(JSON.parse(json));
|
|
53
|
+
} catch {
|
|
54
|
+
// Diagnostics must never interrupt checkout; do not log callback data.
|
|
55
|
+
console.warn('Onramper logHandler failed.');
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
34
59
|
// Single native state callback → update the mirror + fan out to listeners.
|
|
35
60
|
this.native.setStateListener(json => {
|
|
61
|
+
if (this.destroyed) return;
|
|
36
62
|
const s = JSON.parse(json);
|
|
37
63
|
this.state = s;
|
|
38
64
|
if (s.kind === 'failed') this.lastError = _errors.OnramperError.from(s.error);
|
|
@@ -42,6 +68,7 @@ class OnramperClient {
|
|
|
42
68
|
// Single native checkout-event callback → keep the transaction ID mirror
|
|
43
69
|
// synchronized at finalization, then fan out to checkout listeners.
|
|
44
70
|
this.native.setEventListener(json => {
|
|
71
|
+
if (this.destroyed) return;
|
|
45
72
|
const e = JSON.parse(json);
|
|
46
73
|
if (e.type === 'checkoutFinalized') {
|
|
47
74
|
this.updateCurrentTransactionId(e.response.onramperTransactionId);
|
|
@@ -49,6 +76,7 @@ class OnramperClient {
|
|
|
49
76
|
for (const fn of this.eventListeners) fn(e);
|
|
50
77
|
});
|
|
51
78
|
this.native.setTransactionIdListener(transactionId => {
|
|
79
|
+
if (this.destroyed) return;
|
|
52
80
|
// The SDK transiently publishes nil while re-preparing after the payment
|
|
53
81
|
// sheet is dismissed. The finalized transaction ID remains durable across
|
|
54
82
|
// that attempt change; only explicit reset()/signOut() clear the JS mirror.
|
|
@@ -59,7 +87,9 @@ class OnramperClient {
|
|
|
59
87
|
// Nitro stores the async callback natively and awaits it directly — no
|
|
60
88
|
// event round-trip needed.
|
|
61
89
|
this.native.setSessionExpirationHandler(async () => {
|
|
90
|
+
this.assertActive();
|
|
62
91
|
const creds = await config.onSessionExpired();
|
|
92
|
+
this.assertActive();
|
|
63
93
|
return {
|
|
64
94
|
sessionId: creds.sessionId,
|
|
65
95
|
sessionToken: creds.sessionToken
|
|
@@ -70,20 +100,33 @@ class OnramperClient {
|
|
|
70
100
|
clientId: config.clientId,
|
|
71
101
|
environment: config.environment,
|
|
72
102
|
theme: config.theme ?? 'system',
|
|
73
|
-
logLevel: config.logLevel ?? 'off'
|
|
103
|
+
logLevel: config.logLevel ?? 'off',
|
|
104
|
+
isEventLoggingEnabled: config.isEventLoggingEnabled ?? false,
|
|
105
|
+
isEventConsoleLoggingEnabled: config.isEventConsoleLoggingEnabled ?? false
|
|
74
106
|
}).catch(e => {
|
|
75
107
|
const err = _errors.OnramperError.from(e);
|
|
76
|
-
this.lastError = err;
|
|
108
|
+
if (!this.destroyed) this.lastError = err;
|
|
77
109
|
throw err;
|
|
78
110
|
});
|
|
79
111
|
// Swallow the unhandled-rejection warning when no one awaits .configured
|
|
80
112
|
// before calling initialize(). The error still surfaces via initialize().
|
|
81
113
|
this.configured.catch(() => undefined);
|
|
82
114
|
}
|
|
115
|
+
assertActive() {
|
|
116
|
+
if (this.destroyed) {
|
|
117
|
+
throw new _errors.OnramperError({
|
|
118
|
+
code: 'clientDestroyed',
|
|
119
|
+
message: 'This OnramperClient has been destroyed. Create a new client before making SDK calls.',
|
|
120
|
+
userMessage: 'This checkout session has ended. Please reopen checkout.'
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
83
124
|
updateCurrentTransactionId(next) {
|
|
125
|
+
if (this.destroyed) return;
|
|
84
126
|
if (next === this.currentTransactionId) return;
|
|
85
127
|
this.currentTransactionId = next;
|
|
86
128
|
for (const fn of [...this.transactionIdListeners]) {
|
|
129
|
+
if (this.destroyed) break;
|
|
87
130
|
try {
|
|
88
131
|
fn(next);
|
|
89
132
|
} catch (error) {
|
|
@@ -93,18 +136,26 @@ class OnramperClient {
|
|
|
93
136
|
}
|
|
94
137
|
async initialize(creds) {
|
|
95
138
|
try {
|
|
139
|
+
this.assertActive();
|
|
96
140
|
await this.configured;
|
|
141
|
+
this.assertActive();
|
|
97
142
|
await this.native.initialize(creds.sessionId, creds.sessionToken);
|
|
143
|
+
this.assertActive();
|
|
98
144
|
} catch (e) {
|
|
145
|
+
this.assertActive();
|
|
99
146
|
throw _errors.OnramperError.from(e);
|
|
100
147
|
}
|
|
101
148
|
}
|
|
102
149
|
async reset() {
|
|
103
150
|
try {
|
|
151
|
+
this.assertActive();
|
|
104
152
|
await this.configured;
|
|
153
|
+
this.assertActive();
|
|
105
154
|
await this.native.reset();
|
|
155
|
+
this.assertActive();
|
|
106
156
|
this.updateCurrentTransactionId(null);
|
|
107
157
|
} catch (e) {
|
|
158
|
+
this.assertActive();
|
|
108
159
|
throw _errors.OnramperError.from(e);
|
|
109
160
|
}
|
|
110
161
|
}
|
|
@@ -117,10 +168,14 @@ class OnramperClient {
|
|
|
117
168
|
*/
|
|
118
169
|
async signOut() {
|
|
119
170
|
try {
|
|
171
|
+
this.assertActive();
|
|
120
172
|
await this.configured;
|
|
173
|
+
this.assertActive();
|
|
121
174
|
await this.native.signOut();
|
|
175
|
+
this.assertActive();
|
|
122
176
|
this.updateCurrentTransactionId(null);
|
|
123
177
|
} catch (e) {
|
|
178
|
+
this.assertActive();
|
|
124
179
|
throw _errors.OnramperError.from(e);
|
|
125
180
|
}
|
|
126
181
|
}
|
|
@@ -129,6 +184,8 @@ class OnramperClient {
|
|
|
129
184
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
130
185
|
* to render plus the quote. The button handles login / finalize / webview
|
|
131
186
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
187
|
+
* A newer preparation, reset, or sign-out invalidates older unmounted buttons
|
|
188
|
+
* and rejects obsolete in-flight preparations with `intentInvalidated`.
|
|
132
189
|
*
|
|
133
190
|
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
134
191
|
* screens with values you already know about the user. It is best-effort and
|
|
@@ -142,32 +199,40 @@ class OnramperClient {
|
|
|
142
199
|
*/
|
|
143
200
|
async getCheckoutRequirements(request, buttonStyle = {}, prefill = {}) {
|
|
144
201
|
try {
|
|
202
|
+
this.assertActive();
|
|
145
203
|
await this.configured;
|
|
204
|
+
this.assertActive();
|
|
146
205
|
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(prefill), JSON.stringify(buttonStyle));
|
|
206
|
+
this.assertActive();
|
|
147
207
|
const quote = JSON.parse(result.quoteJson);
|
|
148
|
-
const button = /*#__PURE__*/(0, _react.createElement)(
|
|
149
|
-
intentHandle: result.intentHandle
|
|
150
|
-
style: {
|
|
151
|
-
width: '100%',
|
|
152
|
-
minHeight: 56
|
|
153
|
-
}
|
|
208
|
+
const button = /*#__PURE__*/(0, _react.createElement)(_CheckoutButton.CheckoutButton, {
|
|
209
|
+
intentHandle: result.intentHandle
|
|
154
210
|
});
|
|
155
211
|
return {
|
|
156
212
|
button,
|
|
157
213
|
quote
|
|
158
214
|
};
|
|
159
215
|
} catch (e) {
|
|
216
|
+
this.assertActive();
|
|
160
217
|
throw _errors.OnramperError.from(e);
|
|
161
218
|
}
|
|
162
219
|
}
|
|
163
220
|
|
|
164
221
|
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
165
|
-
cancelPreparedIntent(intentHandle) {
|
|
166
|
-
|
|
222
|
+
async cancelPreparedIntent(intentHandle) {
|
|
223
|
+
try {
|
|
224
|
+
this.assertActive();
|
|
225
|
+
await this.native.cancelPreparedIntent(intentHandle);
|
|
226
|
+
this.assertActive();
|
|
227
|
+
} catch (e) {
|
|
228
|
+
this.assertActive();
|
|
229
|
+
throw _errors.OnramperError.from(e);
|
|
230
|
+
}
|
|
167
231
|
}
|
|
168
232
|
|
|
169
233
|
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
170
234
|
addStateListener(fn) {
|
|
235
|
+
this.assertActive();
|
|
171
236
|
this.stateListeners.add(fn);
|
|
172
237
|
return () => {
|
|
173
238
|
this.stateListeners.delete(fn);
|
|
@@ -176,6 +241,7 @@ class OnramperClient {
|
|
|
176
241
|
|
|
177
242
|
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
178
243
|
addTransactionIdListener(fn) {
|
|
244
|
+
this.assertActive();
|
|
179
245
|
this.transactionIdListeners.add(fn);
|
|
180
246
|
return () => {
|
|
181
247
|
this.transactionIdListeners.delete(fn);
|
|
@@ -184,6 +250,7 @@ class OnramperClient {
|
|
|
184
250
|
|
|
185
251
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
186
252
|
addEventListener(name, fn) {
|
|
253
|
+
this.assertActive();
|
|
187
254
|
const wrapper = e => {
|
|
188
255
|
if (e.type === name) fn(e);
|
|
189
256
|
};
|
|
@@ -193,8 +260,10 @@ class OnramperClient {
|
|
|
193
260
|
};
|
|
194
261
|
}
|
|
195
262
|
|
|
196
|
-
/**
|
|
263
|
+
/** Idempotent teardown. Further operations reject with `clientDestroyed`; create a new client to restart. */
|
|
197
264
|
destroy() {
|
|
265
|
+
if (this.destroyed) return;
|
|
266
|
+
this.destroyed = true;
|
|
198
267
|
this.stateListeners.clear();
|
|
199
268
|
this.eventListeners.clear();
|
|
200
269
|
this.transactionIdListeners.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","
|
|
1
|
+
{"version":3,"names":["_react","require","_CheckoutButton","_OnramperNative","_errors","OnramperClient","sdkVersion","native","createOnramperNative","dispose","state","kind","lastError","currentTransactionId","stateListeners","Set","eventListeners","transactionIdListeners","destroyed","constructor","config","logHandler","handler","setLogListener","json","JSON","parse","console","warn","setStateListener","s","OnramperError","from","error","fn","setEventListener","e","type","updateCurrentTransactionId","response","onramperTransactionId","setTransactionIdListener","transactionId","undefined","setSessionExpirationHandler","assertActive","creds","onSessionExpired","sessionId","sessionToken","configured","configure","apiKey","clientId","environment","theme","logLevel","isEventLoggingEnabled","isEventConsoleLoggingEnabled","catch","err","code","message","userMessage","next","initialize","reset","signOut","getCheckoutRequirements","request","buttonStyle","prefill","result","stringify","quote","quoteJson","button","createElement","CheckoutButton","intentHandle","cancelPreparedIntent","addStateListener","add","delete","addTransactionIdListener","addEventListener","name","wrapper","destroy","clear","exports"],"sourceRoot":"../../src","sources":["OnramperClient.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/errors.js
CHANGED
|
@@ -9,20 +9,34 @@ class OnramperError extends Error {
|
|
|
9
9
|
super(payload.message);
|
|
10
10
|
this.name = 'OnramperError';
|
|
11
11
|
this.code = payload.code;
|
|
12
|
+
this.userMessage = payload.userMessage ?? 'Something went wrong. Please try again.';
|
|
13
|
+
this.supportCode = payload.supportCode ?? payload.code;
|
|
12
14
|
this.info = payload.info;
|
|
13
15
|
}
|
|
14
16
|
static from(value) {
|
|
15
17
|
if (value instanceof OnramperError) return value;
|
|
18
|
+
// Nitro transports Swift exceptions as message-only JS Errors. Our native
|
|
19
|
+
// bridge encodes SDK errors explicitly so Promise rejections retain the
|
|
20
|
+
// same fields as failed events, without consulting unrelated client state.
|
|
21
|
+
const message = value instanceof Error ? value.message : typeof value === 'string' ? value : undefined;
|
|
22
|
+
if (message?.startsWith('ONRAMPER_ERROR:')) {
|
|
23
|
+
try {
|
|
24
|
+
const payload = JSON.parse(message.slice('ONRAMPER_ERROR:'.length));
|
|
25
|
+
if (payload && typeof payload.code === 'string' && typeof payload.message === 'string') {
|
|
26
|
+
return OnramperError.from(payload);
|
|
27
|
+
}
|
|
28
|
+
} catch {
|
|
29
|
+
// A malformed/non-SDK error falls back to the ordinary error path.
|
|
30
|
+
}
|
|
31
|
+
}
|
|
16
32
|
if (value && typeof value === 'object') {
|
|
17
|
-
// Structured errors (from the `.failed` state) arrive as a plain
|
|
18
|
-
// `{ code, message, info? }` object. Thrown promise rejections surface
|
|
19
|
-
// as a JS Error with just a message; we default the code in that case
|
|
20
|
-
// (the structured error is also available on `client.state` / lastError).
|
|
21
33
|
const v = value;
|
|
22
34
|
return new OnramperError({
|
|
23
35
|
code: v.code ?? 'unrecoverable',
|
|
24
36
|
message: v.message ?? 'Unknown error',
|
|
25
|
-
info: v.info
|
|
37
|
+
info: v.info,
|
|
38
|
+
userMessage: typeof v.userMessage === 'string' ? v.userMessage : undefined,
|
|
39
|
+
supportCode: typeof v.supportCode === 'string' ? v.supportCode : undefined
|
|
26
40
|
});
|
|
27
41
|
}
|
|
28
42
|
return new OnramperError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OnramperError","Error","constructor","payload","message","name","code","info","from","value","v","String","exports"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["OnramperError","Error","constructor","payload","message","name","code","userMessage","supportCode","info","from","value","undefined","startsWith","JSON","parse","slice","length","v","String","exports"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;;;;;AAgDO,MAAMA,aAAa,SAASC,KAAK,CAAiC;EAMvEC,WAAWA,CAACC,OAA6B,EAAE;IACzC,KAAK,CAACA,OAAO,CAACC,OAAO,CAAC;IACtB,IAAI,CAACC,IAAI,GAAG,eAAe;IAC3B,IAAI,CAACC,IAAI,GAAGH,OAAO,CAACG,IAAI;IACxB,IAAI,CAACC,WAAW,GAAGJ,OAAO,CAACI,WAAW,IAAI,yCAAyC;IACnF,IAAI,CAACC,WAAW,GAAGL,OAAO,CAACK,WAAW,IAAIL,OAAO,CAACG,IAAI;IACtD,IAAI,CAACG,IAAI,GAAGN,OAAO,CAACM,IAAI;EAC1B;EAEA,OAAOC,IAAIA,CAACC,KAAc,EAAiB;IACzC,IAAIA,KAAK,YAAYX,aAAa,EAAE,OAAOW,KAAK;IAChD;IACA;IACA;IACA,MAAMP,OAAO,GAAGO,KAAK,YAAYV,KAAK,GAAGU,KAAK,CAACP,OAAO,GAAG,OAAOO,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGC,SAAS;IACtG,IAAIR,OAAO,EAAES,UAAU,CAAC,iBAAiB,CAAC,EAAE;MAC1C,IAAI;QACF,MAAMV,OAAO,GAAGW,IAAI,CAACC,KAAK,CAACX,OAAO,CAACY,KAAK,CAAC,iBAAiB,CAACC,MAAM,CAAC,CAAC;QACnE,IAAId,OAAO,IAAI,OAAOA,OAAO,CAACG,IAAI,KAAK,QAAQ,IAAI,OAAOH,OAAO,CAACC,OAAO,KAAK,QAAQ,EAAE;UACtF,OAAOJ,aAAa,CAACU,IAAI,CAACP,OAAO,CAAC;QACpC;MACF,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;IACA,IAAIQ,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MACtC,MAAMO,CAAC,GAAGP,KAAsC;MAChD,OAAO,IAAIX,aAAa,CAAC;QACvBM,IAAI,EAAGY,CAAC,CAACZ,IAAI,IAAI,eAAqC;QACtDF,OAAO,EAAEc,CAAC,CAACd,OAAO,IAAI,eAAe;QACrCK,IAAI,EAAES,CAAC,CAACT,IAAI;QACZF,WAAW,EAAE,OAAOW,CAAC,CAACX,WAAW,KAAK,QAAQ,GAAGW,CAAC,CAACX,WAAW,GAAGK,SAAS;QAC1EJ,WAAW,EAAE,OAAOU,CAAC,CAACV,WAAW,KAAK,QAAQ,GAAGU,CAAC,CAACV,WAAW,GAAGI;MACnE,CAAC,CAAC;IACJ;IACA,OAAO,IAAIZ,aAAa,CAAC;MAAEM,IAAI,EAAE,eAAe;MAAEF,OAAO,EAAEe,MAAM,CAACR,KAAK;IAAE,CAAC,CAAC;EAC7E;AACF;AAACS,OAAA,CAAApB,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createElement, useMemo, useState } from 'react';
|
|
4
|
+
import { callback } from 'react-native-nitro-modules';
|
|
5
|
+
import { OnramperCheckoutButtonView } from "./OnramperCheckoutButtonView.js";
|
|
6
|
+
|
|
7
|
+
// Height of the bare Buy button. Used until native reports the measured content
|
|
8
|
+
// height so the first frame isn't collapsed.
|
|
9
|
+
export const CHECKOUT_BUTTON_FALLBACK_HEIGHT = 56;
|
|
10
|
+
/**
|
|
11
|
+
* Sizes the native checkout button to its SwiftUI content. The content grows when
|
|
12
|
+
* the SDK shows ToS text under the Buy button (which can change after mount), and
|
|
13
|
+
* Yoga can't measure a SwiftUI view — so native reports the height and it is
|
|
14
|
+
* applied here as an explicit `height`.
|
|
15
|
+
*/
|
|
16
|
+
export function CheckoutButton({
|
|
17
|
+
intentHandle
|
|
18
|
+
}) {
|
|
19
|
+
const [height, setHeight] = useState(null);
|
|
20
|
+
const onContentHeightChange = useMemo(() => callback(h => setHeight(Math.ceil(h))), []);
|
|
21
|
+
return /*#__PURE__*/createElement(OnramperCheckoutButtonView, {
|
|
22
|
+
intentHandle,
|
|
23
|
+
onContentHeightChange,
|
|
24
|
+
style: {
|
|
25
|
+
width: '100%',
|
|
26
|
+
height: height ?? CHECKOUT_BUTTON_FALLBACK_HEIGHT
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=CheckoutButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createElement","useMemo","useState","callback","OnramperCheckoutButtonView","CHECKOUT_BUTTON_FALLBACK_HEIGHT","CheckoutButton","intentHandle","height","setHeight","onContentHeightChange","h","Math","ceil","style","width"],"sourceRoot":"../../src","sources":["CheckoutButton.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACxD,SAASC,QAAQ,QAAQ,4BAA4B;AAErD,SAASC,0BAA0B,QAAQ,iCAA8B;;AAEzE;AACA;AACA,OAAO,MAAMC,+BAA+B,GAAG,EAAE;AAMjD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAC;EAAEC;AAAkC,CAAC,EAAE;EACpE,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGP,QAAQ,CAAgB,IAAI,CAAC;EACzD,MAAMQ,qBAAqB,GAAGT,OAAO,CAAC,MAAME,QAAQ,CAAEQ,CAAS,IAAKF,SAAS,CAACG,IAAI,CAACC,IAAI,CAACF,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACjG,oBAAOX,aAAa,CAACI,0BAA0B,EAAE;IAC/CG,YAAY;IACZG,qBAAqB;IACrBI,KAAK,EAAE;MAAEC,KAAK,EAAE,MAAM;MAAEP,MAAM,EAAEA,MAAM,IAAIH;IAAgC;EAC5E,CAAC,CAAC;AACJ","ignoreList":[]}
|