@onramper/onramper-react-native 1.0.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 +21 -0
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/OnramperReactNative.podspec +36 -0
- package/README.md +114 -0
- package/app.plugin.js +51 -0
- package/ios/Frameworks/LICENSE +202 -0
- package/ios/Frameworks/NOTICE +5 -0
- package/ios/Frameworks/OnramperSDK.xcframework/Info.plist +48 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/Info.plist +0 -0
- 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 +548 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/OnramperSDK +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/OnramperSDK_OnramperSDK.bundle/Info.plist +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/OnramperSDK_OnramperSDK.bundle/PrivacyInfo.xcprivacy +27 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/OnramperSDK.framework/PrivacyInfo.xcprivacy +27 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64/dSYMs/OnramperSDK.framework.dSYM/Contents/Info.plist +20 -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 +2518 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/Info.plist +0 -0
- 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 +548 -0
- 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 +548 -0
- 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/Info.plist +0 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/OnramperSDK_OnramperSDK.bundle/PrivacyInfo.xcprivacy +27 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/OnramperSDK.framework/PrivacyInfo.xcprivacy +27 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Info.plist +20 -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 +2518 -0
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/OnramperSDK.yml +2487 -0
- package/ios/HybridOnramperCheckoutButton.swift +112 -0
- package/ios/HybridOnramperNitro.swift +194 -0
- package/ios/OnramperCheckoutBridge.swift +88 -0
- package/ios/OnramperSDKBridge.swift +185 -0
- package/ios/PreparedIntentRegistry.swift +78 -0
- package/lib/commonjs/OnramperCheckoutButtonView.js +16 -0
- package/lib/commonjs/OnramperCheckoutButtonView.js.map +1 -0
- package/lib/commonjs/OnramperClient.js +161 -0
- package/lib/commonjs/OnramperClient.js.map +1 -0
- package/lib/commonjs/OnramperNative.js +22 -0
- package/lib/commonjs/OnramperNative.js.map +1 -0
- package/lib/commonjs/errors.js +35 -0
- package/lib/commonjs/errors.js.map +1 -0
- package/lib/commonjs/events.js +6 -0
- package/lib/commonjs/events.js.map +1 -0
- package/lib/commonjs/generated/OnramperCheckoutButtonConfig.json +10 -0
- package/lib/commonjs/index.js +27 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/OnramperCheckoutButton.nitro.js +6 -0
- package/lib/commonjs/specs/OnramperCheckoutButton.nitro.js.map +1 -0
- package/lib/commonjs/specs/OnramperNitro.nitro.js +6 -0
- package/lib/commonjs/specs/OnramperNitro.nitro.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/OnramperCheckoutButtonView.js +11 -0
- package/lib/module/OnramperCheckoutButtonView.js.map +1 -0
- package/lib/module/OnramperClient.js +156 -0
- package/lib/module/OnramperClient.js.map +1 -0
- package/lib/module/OnramperNative.js +18 -0
- package/lib/module/OnramperNative.js.map +1 -0
- package/lib/module/errors.js +30 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/events.js +4 -0
- package/lib/module/events.js.map +1 -0
- package/lib/module/generated/OnramperCheckoutButtonConfig.json +10 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/specs/OnramperCheckoutButton.nitro.js +4 -0
- package/lib/module/specs/OnramperCheckoutButton.nitro.js.map +1 -0
- package/lib/module/specs/OnramperNitro.nitro.js +4 -0
- package/lib/module/specs/OnramperNitro.nitro.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/OnramperCheckoutButtonView.d.ts +9 -0
- package/lib/typescript/commonjs/src/OnramperCheckoutButtonView.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/OnramperClient.d.ts +49 -0
- package/lib/typescript/commonjs/src/OnramperClient.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/OnramperNative.d.ts +9 -0
- package/lib/typescript/commonjs/src/OnramperNative.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/errors.d.ts +13 -0
- package/lib/typescript/commonjs/src/errors.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/events.d.ts +48 -0
- package/lib/typescript/commonjs/src/events.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +9 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/specs/OnramperCheckoutButton.nitro.d.ts +10 -0
- package/lib/typescript/commonjs/src/specs/OnramperCheckoutButton.nitro.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/specs/OnramperNitro.nitro.d.ts +39 -0
- package/lib/typescript/commonjs/src/specs/OnramperNitro.nitro.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types.d.ts +127 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/OnramperCheckoutButtonView.d.ts +9 -0
- package/lib/typescript/module/src/OnramperCheckoutButtonView.d.ts.map +1 -0
- package/lib/typescript/module/src/OnramperClient.d.ts +49 -0
- package/lib/typescript/module/src/OnramperClient.d.ts.map +1 -0
- package/lib/typescript/module/src/OnramperNative.d.ts +9 -0
- package/lib/typescript/module/src/OnramperNative.d.ts.map +1 -0
- package/lib/typescript/module/src/errors.d.ts +13 -0
- package/lib/typescript/module/src/errors.d.ts.map +1 -0
- package/lib/typescript/module/src/events.d.ts +48 -0
- package/lib/typescript/module/src/events.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +9 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/specs/OnramperCheckoutButton.nitro.d.ts +10 -0
- package/lib/typescript/module/src/specs/OnramperCheckoutButton.nitro.d.ts.map +1 -0
- package/lib/typescript/module/src/specs/OnramperNitro.nitro.d.ts +39 -0
- package/lib/typescript/module/src/specs/OnramperNitro.nitro.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +127 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/nitro.json +19 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/ios/OnramperReactNative+autolinking.rb +62 -0
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.cpp +107 -0
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.hpp +299 -0
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Umbrella.hpp +60 -0
- package/nitrogen/generated/ios/OnramperReactNativeAutolinking.mm +41 -0
- package/nitrogen/generated/ios/OnramperReactNativeAutolinking.swift +38 -0
- package/nitrogen/generated/ios/c++/HybridOnramperCheckoutButtonSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridOnramperCheckoutButtonSpecSwift.hpp +81 -0
- package/nitrogen/generated/ios/c++/HybridOnramperNitroSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridOnramperNitroSpecSwift.hpp +150 -0
- package/nitrogen/generated/ios/c++/views/HybridOnramperCheckoutButtonComponent.mm +122 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_NitroSessionCredentials____.swift +61 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroSessionCredentials.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_PreparedIntentResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_NitroSessionCredentials__.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridOnramperCheckoutButtonSpec.swift +55 -0
- package/nitrogen/generated/ios/swift/HybridOnramperCheckoutButtonSpec_cxx.swift +156 -0
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec.swift +63 -0
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec_cxx.swift +309 -0
- package/nitrogen/generated/ios/swift/NitroSessionCredentials.swift +34 -0
- package/nitrogen/generated/ios/swift/OnramperNitroConfig.swift +49 -0
- package/nitrogen/generated/ios/swift/PreparedIntentResult.swift +34 -0
- package/nitrogen/generated/shared/c++/HybridOnramperCheckoutButtonSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridOnramperCheckoutButtonSpec.hpp +63 -0
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.hpp +80 -0
- package/nitrogen/generated/shared/c++/NitroSessionCredentials.hpp +87 -0
- package/nitrogen/generated/shared/c++/OnramperNitroConfig.hpp +99 -0
- package/nitrogen/generated/shared/c++/PreparedIntentResult.hpp +87 -0
- package/nitrogen/generated/shared/c++/views/HybridOnramperCheckoutButtonComponent.cpp +83 -0
- package/nitrogen/generated/shared/c++/views/HybridOnramperCheckoutButtonComponent.hpp +111 -0
- package/nitrogen/generated/shared/json/OnramperCheckoutButtonConfig.json +10 -0
- package/package.json +107 -0
- package/src/OnramperCheckoutButtonView.tsx +15 -0
- package/src/OnramperClient.ts +170 -0
- package/src/OnramperNative.ts +19 -0
- package/src/errors.ts +69 -0
- package/src/events.ts +23 -0
- package/src/generated/OnramperCheckoutButtonConfig.json +10 -0
- package/src/index.ts +30 -0
- package/src/specs/OnramperCheckoutButton.nitro.ts +16 -0
- package/src/specs/OnramperNitro.nitro.ts +60 -0
- package/src/types.ts +133 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OnramperClient = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _OnramperCheckoutButtonView = require("./OnramperCheckoutButtonView.js");
|
|
9
|
+
var _OnramperNative = require("./OnramperNative.js");
|
|
10
|
+
var _errors = require("./errors.js");
|
|
11
|
+
/**
|
|
12
|
+
* Typed, public entry point to the Onramper SDK. Wraps the native Nitro hybrid
|
|
13
|
+
* object: state and checkout events arrive as JSON strings over single native
|
|
14
|
+
* callbacks and are parsed here into the typed `OnramperState` / `CheckoutEvent`
|
|
15
|
+
* unions, then fanned out to any number of listeners.
|
|
16
|
+
*/
|
|
17
|
+
class OnramperClient {
|
|
18
|
+
state = {
|
|
19
|
+
kind: 'idle'
|
|
20
|
+
};
|
|
21
|
+
lastError = null;
|
|
22
|
+
|
|
23
|
+
// Each client owns its own native instance (and thus its own SDK client).
|
|
24
|
+
native = (0, _OnramperNative.createOnramperNative)();
|
|
25
|
+
stateListeners = new Set();
|
|
26
|
+
eventListeners = new Set();
|
|
27
|
+
|
|
28
|
+
// Resolved when the constructor-issued configure() completes. Public methods
|
|
29
|
+
// that need the native client await this first.
|
|
30
|
+
|
|
31
|
+
constructor(config) {
|
|
32
|
+
// Single native state callback → update the mirror + fan out to listeners.
|
|
33
|
+
this.native.setStateListener(json => {
|
|
34
|
+
const s = JSON.parse(json);
|
|
35
|
+
this.state = s;
|
|
36
|
+
if (s.kind === 'failed') this.lastError = _errors.OnramperError.from(s.error);
|
|
37
|
+
for (const fn of this.stateListeners) fn(s);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Single native checkout-event callback → fan out to listeners.
|
|
41
|
+
this.native.setEventListener(json => {
|
|
42
|
+
const e = JSON.parse(json);
|
|
43
|
+
for (const fn of this.eventListeners) fn(e);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// The SDK calls this when its session expires; return fresh credentials.
|
|
47
|
+
// Nitro stores the async callback natively and awaits it directly — no
|
|
48
|
+
// event round-trip needed.
|
|
49
|
+
this.native.setSessionExpirationHandler(async () => {
|
|
50
|
+
const creds = await config.onSessionExpired();
|
|
51
|
+
return {
|
|
52
|
+
sessionId: creds.sessionId,
|
|
53
|
+
sessionToken: creds.sessionToken
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
this.configured = this.native.configure({
|
|
57
|
+
apiKey: config.apiKey,
|
|
58
|
+
clientId: config.clientId,
|
|
59
|
+
environment: config.environment,
|
|
60
|
+
theme: config.theme ?? 'system',
|
|
61
|
+
logLevel: config.logLevel ?? 'off'
|
|
62
|
+
}).catch(e => {
|
|
63
|
+
const err = _errors.OnramperError.from(e);
|
|
64
|
+
this.lastError = err;
|
|
65
|
+
throw err;
|
|
66
|
+
});
|
|
67
|
+
// Swallow the unhandled-rejection warning when no one awaits .configured
|
|
68
|
+
// before calling initialize(). The error still surfaces via initialize().
|
|
69
|
+
this.configured.catch(() => undefined);
|
|
70
|
+
}
|
|
71
|
+
async initialize(creds) {
|
|
72
|
+
try {
|
|
73
|
+
await this.configured;
|
|
74
|
+
await this.native.initialize(creds.sessionId, creds.sessionToken);
|
|
75
|
+
} catch (e) {
|
|
76
|
+
throw _errors.OnramperError.from(e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async reset() {
|
|
80
|
+
try {
|
|
81
|
+
await this.configured;
|
|
82
|
+
await this.native.reset();
|
|
83
|
+
} catch (e) {
|
|
84
|
+
throw _errors.OnramperError.from(e);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Signs the OnramperID user out by clearing stored OIDC tokens. The next
|
|
90
|
+
* checkout that requires user_info will re-trigger the login flow. Also
|
|
91
|
+
* resets in-flight checkout state. Does NOT clear the partner-scoped SDK
|
|
92
|
+
* session — re-calling `initialize` is only needed if that session expired.
|
|
93
|
+
*/
|
|
94
|
+
async signOut() {
|
|
95
|
+
try {
|
|
96
|
+
await this.configured;
|
|
97
|
+
await this.native.signOut();
|
|
98
|
+
} catch (e) {
|
|
99
|
+
throw _errors.OnramperError.from(e);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Fetches checkout requirements + quote and returns a native checkout button
|
|
105
|
+
* to render plus the quote. The button handles login / finalize / webview
|
|
106
|
+
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
107
|
+
*/
|
|
108
|
+
async getCheckoutRequirements(request, buttonStyle = {}) {
|
|
109
|
+
try {
|
|
110
|
+
await this.configured;
|
|
111
|
+
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(buttonStyle));
|
|
112
|
+
const quote = JSON.parse(result.quoteJson);
|
|
113
|
+
const button = /*#__PURE__*/(0, _react.createElement)(_OnramperCheckoutButtonView.OnramperCheckoutButtonView, {
|
|
114
|
+
intentHandle: result.intentHandle,
|
|
115
|
+
style: {
|
|
116
|
+
width: '100%',
|
|
117
|
+
minHeight: 56
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return {
|
|
121
|
+
button,
|
|
122
|
+
quote
|
|
123
|
+
};
|
|
124
|
+
} catch (e) {
|
|
125
|
+
throw _errors.OnramperError.from(e);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
130
|
+
cancelPreparedIntent(intentHandle) {
|
|
131
|
+
return this.native.cancelPreparedIntent(intentHandle);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
135
|
+
addStateListener(fn) {
|
|
136
|
+
this.stateListeners.add(fn);
|
|
137
|
+
return () => {
|
|
138
|
+
this.stateListeners.delete(fn);
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
143
|
+
addEventListener(name, fn) {
|
|
144
|
+
const wrapper = e => {
|
|
145
|
+
if (e.type === name) fn(e);
|
|
146
|
+
};
|
|
147
|
+
this.eventListeners.add(wrapper);
|
|
148
|
+
return () => {
|
|
149
|
+
this.eventListeners.delete(wrapper);
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Tear down: clears JS listeners and releases the native callbacks + SDK client. */
|
|
154
|
+
destroy() {
|
|
155
|
+
this.stateListeners.clear();
|
|
156
|
+
this.eventListeners.clear();
|
|
157
|
+
this.native.dispose();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.OnramperClient = OnramperClient;
|
|
161
|
+
//# sourceMappingURL=OnramperClient.js.map
|
|
@@ -0,0 +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","undefined","initialize","reset","signOut","getCheckoutRequirements","request","buttonStyle","result","stringify","quote","quoteJson","button","createElement","OnramperCheckoutButtonView","intentHandle","style","width","minHeight","cancelPreparedIntent","addStateListener","add","delete","addEventListener","name","wrapper","type","destroy","clear","dispose","exports"],"sourceRoot":"../../src","sources":["OnramperClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createOnramperNative = createOnramperNative;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
9
|
+
/**
|
|
10
|
+
* Creates a fresh native Onramper Nitro hybrid object. Each `OnramperClient`
|
|
11
|
+
* owns its own instance, so its listeners and the underlying SDK client are
|
|
12
|
+
* isolated per client and torn down by `destroy()` → `dispose()`.
|
|
13
|
+
*/
|
|
14
|
+
function createOnramperNative() {
|
|
15
|
+
// iOS-only in this release. Fail with a clear message rather than the opaque
|
|
16
|
+
// "hybrid object not found" Nitro would throw on platforms without a native impl.
|
|
17
|
+
if (_reactNative.Platform.OS !== 'ios') {
|
|
18
|
+
throw new Error(`Onramper React Native is iOS-only in this release; it is not supported on ${_reactNative.Platform.OS}.`);
|
|
19
|
+
}
|
|
20
|
+
return _reactNativeNitroModules.NitroModules.createHybridObject('OnramperNitro');
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=OnramperNative.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeNitroModules","createOnramperNative","Platform","OS","Error","NitroModules","createHybridObject"],"sourceRoot":"../../src","sources":["OnramperNative.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAGA;AACA;AACA;AACA;AACA;AACO,SAASE,oBAAoBA,CAAA,EAAkB;EACpD;EACA;EACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,MAAM,IAAIC,KAAK,CAAC,6EAA6EF,qBAAQ,CAACC,EAAE,GAAG,CAAC;EAC9G;EACA,OAAOE,qCAAY,CAACC,kBAAkB,CAAgB,eAAe,CAAC;AACxE","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OnramperError = void 0;
|
|
7
|
+
class OnramperError extends Error {
|
|
8
|
+
constructor(payload) {
|
|
9
|
+
super(payload.message);
|
|
10
|
+
this.name = 'OnramperError';
|
|
11
|
+
this.code = payload.code;
|
|
12
|
+
this.info = payload.info;
|
|
13
|
+
}
|
|
14
|
+
static from(value) {
|
|
15
|
+
if (value instanceof OnramperError) return value;
|
|
16
|
+
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
|
+
const v = value;
|
|
22
|
+
return new OnramperError({
|
|
23
|
+
code: v.code ?? 'unrecoverable',
|
|
24
|
+
message: v.message ?? 'Unknown error',
|
|
25
|
+
info: v.info
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return new OnramperError({
|
|
29
|
+
code: 'unrecoverable',
|
|
30
|
+
message: String(value)
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.OnramperError = OnramperError;
|
|
35
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["OnramperError","Error","constructor","payload","message","name","code","info","from","value","v","String","exports"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;;;;;AAyCO,MAAMA,aAAa,SAASC,KAAK,CAAiC;EAIvEC,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,IAAI,GAAGJ,OAAO,CAACI,IAAI;EAC1B;EAEA,OAAOC,IAAIA,CAACC,KAAc,EAAiB;IACzC,IAAIA,KAAK,YAAYT,aAAa,EAAE,OAAOS,KAAK;IAChD,IAAIA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MACtC;MACA;MACA;MACA;MACA,MAAMC,CAAC,GAAGD,KAA4E;MACtF,OAAO,IAAIT,aAAa,CAAC;QACvBM,IAAI,EAAGI,CAAC,CAACJ,IAAI,IAAI,eAAqC;QACtDF,OAAO,EAAEM,CAAC,CAACN,OAAO,IAAI,eAAe;QACrCG,IAAI,EAAEG,CAAC,CAACH;MACV,CAAC,CAAC;IACJ;IACA,OAAO,IAAIP,aAAa,CAAC;MAAEM,IAAI,EAAE,eAAe;MAAEF,OAAO,EAAEO,MAAM,CAACF,KAAK;IAAE,CAAC,CAAC;EAC7E;AACF;AAACG,OAAA,CAAAZ,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["events.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "OnramperCheckoutButtonView", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _OnramperCheckoutButtonView.OnramperCheckoutButtonView;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "OnramperClient", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _OnramperClient.OnramperClient;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "OnramperError", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _errors.OnramperError;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
var _OnramperClient = require("./OnramperClient.js");
|
|
25
|
+
var _OnramperCheckoutButtonView = require("./OnramperCheckoutButtonView.js");
|
|
26
|
+
var _errors = require("./errors.js");
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_OnramperClient","require","_OnramperCheckoutButtonView","_errors"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAEA,IAAAC,2BAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/OnramperCheckoutButton.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/OnramperNitro.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { getHostComponent } from 'react-native-nitro-modules';
|
|
4
|
+
import OnramperCheckoutButtonConfig from './generated/OnramperCheckoutButtonConfig.json';
|
|
5
|
+
/**
|
|
6
|
+
* Native checkout button. Renders the SwiftUI `OnramperCheckoutButton` that
|
|
7
|
+
* `OnramperClient.getCheckoutRequirements()` prepared, addressed by `intentHandle`.
|
|
8
|
+
* Standard view props (e.g. `style`) are supported via `HybridViewProps`.
|
|
9
|
+
*/
|
|
10
|
+
export const OnramperCheckoutButtonView = getHostComponent('OnramperCheckoutButton', () => OnramperCheckoutButtonConfig);
|
|
11
|
+
//# sourceMappingURL=OnramperCheckoutButtonView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getHostComponent","OnramperCheckoutButtonConfig","OnramperCheckoutButtonView"],"sourceRoot":"../../src","sources":["OnramperCheckoutButtonView.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,4BAA4B;AAC7D,OAAOC,4BAA4B,MAAM,+CAA+C;AAKxF;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAGF,gBAAgB,CACxD,wBAAwB,EACxB,MAAMC,4BACR,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createElement } from 'react';
|
|
4
|
+
import { OnramperCheckoutButtonView } from "./OnramperCheckoutButtonView.js";
|
|
5
|
+
import { createOnramperNative } from "./OnramperNative.js";
|
|
6
|
+
import { OnramperError } from "./errors.js";
|
|
7
|
+
/**
|
|
8
|
+
* Typed, public entry point to the Onramper SDK. Wraps the native Nitro hybrid
|
|
9
|
+
* object: state and checkout events arrive as JSON strings over single native
|
|
10
|
+
* callbacks and are parsed here into the typed `OnramperState` / `CheckoutEvent`
|
|
11
|
+
* unions, then fanned out to any number of listeners.
|
|
12
|
+
*/
|
|
13
|
+
export class OnramperClient {
|
|
14
|
+
state = {
|
|
15
|
+
kind: 'idle'
|
|
16
|
+
};
|
|
17
|
+
lastError = null;
|
|
18
|
+
|
|
19
|
+
// Each client owns its own native instance (and thus its own SDK client).
|
|
20
|
+
native = createOnramperNative();
|
|
21
|
+
stateListeners = new Set();
|
|
22
|
+
eventListeners = new Set();
|
|
23
|
+
|
|
24
|
+
// Resolved when the constructor-issued configure() completes. Public methods
|
|
25
|
+
// that need the native client await this first.
|
|
26
|
+
|
|
27
|
+
constructor(config) {
|
|
28
|
+
// Single native state callback → update the mirror + fan out to listeners.
|
|
29
|
+
this.native.setStateListener(json => {
|
|
30
|
+
const s = JSON.parse(json);
|
|
31
|
+
this.state = s;
|
|
32
|
+
if (s.kind === 'failed') this.lastError = OnramperError.from(s.error);
|
|
33
|
+
for (const fn of this.stateListeners) fn(s);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Single native checkout-event callback → fan out to listeners.
|
|
37
|
+
this.native.setEventListener(json => {
|
|
38
|
+
const e = JSON.parse(json);
|
|
39
|
+
for (const fn of this.eventListeners) fn(e);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// The SDK calls this when its session expires; return fresh credentials.
|
|
43
|
+
// Nitro stores the async callback natively and awaits it directly — no
|
|
44
|
+
// event round-trip needed.
|
|
45
|
+
this.native.setSessionExpirationHandler(async () => {
|
|
46
|
+
const creds = await config.onSessionExpired();
|
|
47
|
+
return {
|
|
48
|
+
sessionId: creds.sessionId,
|
|
49
|
+
sessionToken: creds.sessionToken
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
this.configured = this.native.configure({
|
|
53
|
+
apiKey: config.apiKey,
|
|
54
|
+
clientId: config.clientId,
|
|
55
|
+
environment: config.environment,
|
|
56
|
+
theme: config.theme ?? 'system',
|
|
57
|
+
logLevel: config.logLevel ?? 'off'
|
|
58
|
+
}).catch(e => {
|
|
59
|
+
const err = OnramperError.from(e);
|
|
60
|
+
this.lastError = err;
|
|
61
|
+
throw err;
|
|
62
|
+
});
|
|
63
|
+
// Swallow the unhandled-rejection warning when no one awaits .configured
|
|
64
|
+
// before calling initialize(). The error still surfaces via initialize().
|
|
65
|
+
this.configured.catch(() => undefined);
|
|
66
|
+
}
|
|
67
|
+
async initialize(creds) {
|
|
68
|
+
try {
|
|
69
|
+
await this.configured;
|
|
70
|
+
await this.native.initialize(creds.sessionId, creds.sessionToken);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
throw OnramperError.from(e);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async reset() {
|
|
76
|
+
try {
|
|
77
|
+
await this.configured;
|
|
78
|
+
await this.native.reset();
|
|
79
|
+
} catch (e) {
|
|
80
|
+
throw OnramperError.from(e);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Signs the OnramperID user out by clearing stored OIDC tokens. The next
|
|
86
|
+
* checkout that requires user_info will re-trigger the login flow. Also
|
|
87
|
+
* resets in-flight checkout state. Does NOT clear the partner-scoped SDK
|
|
88
|
+
* session — re-calling `initialize` is only needed if that session expired.
|
|
89
|
+
*/
|
|
90
|
+
async signOut() {
|
|
91
|
+
try {
|
|
92
|
+
await this.configured;
|
|
93
|
+
await this.native.signOut();
|
|
94
|
+
} catch (e) {
|
|
95
|
+
throw OnramperError.from(e);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Fetches checkout requirements + quote and returns a native checkout button
|
|
101
|
+
* to render plus the quote. The button handles login / finalize / webview
|
|
102
|
+
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
103
|
+
*/
|
|
104
|
+
async getCheckoutRequirements(request, buttonStyle = {}) {
|
|
105
|
+
try {
|
|
106
|
+
await this.configured;
|
|
107
|
+
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(buttonStyle));
|
|
108
|
+
const quote = JSON.parse(result.quoteJson);
|
|
109
|
+
const button = /*#__PURE__*/createElement(OnramperCheckoutButtonView, {
|
|
110
|
+
intentHandle: result.intentHandle,
|
|
111
|
+
style: {
|
|
112
|
+
width: '100%',
|
|
113
|
+
minHeight: 56
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
button,
|
|
118
|
+
quote
|
|
119
|
+
};
|
|
120
|
+
} catch (e) {
|
|
121
|
+
throw OnramperError.from(e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
126
|
+
cancelPreparedIntent(intentHandle) {
|
|
127
|
+
return this.native.cancelPreparedIntent(intentHandle);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
131
|
+
addStateListener(fn) {
|
|
132
|
+
this.stateListeners.add(fn);
|
|
133
|
+
return () => {
|
|
134
|
+
this.stateListeners.delete(fn);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
139
|
+
addEventListener(name, fn) {
|
|
140
|
+
const wrapper = e => {
|
|
141
|
+
if (e.type === name) fn(e);
|
|
142
|
+
};
|
|
143
|
+
this.eventListeners.add(wrapper);
|
|
144
|
+
return () => {
|
|
145
|
+
this.eventListeners.delete(wrapper);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Tear down: clears JS listeners and releases the native callbacks + SDK client. */
|
|
150
|
+
destroy() {
|
|
151
|
+
this.stateListeners.clear();
|
|
152
|
+
this.eventListeners.clear();
|
|
153
|
+
this.native.dispose();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=OnramperClient.js.map
|
|
@@ -0,0 +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","undefined","initialize","reset","signOut","getCheckoutRequirements","request","buttonStyle","result","stringify","quote","quoteJson","button","intentHandle","style","width","minHeight","cancelPreparedIntent","addStateListener","add","delete","addEventListener","name","wrapper","type","destroy","clear","dispose"],"sourceRoot":"../../src","sources":["OnramperClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Platform } from 'react-native';
|
|
4
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a fresh native Onramper Nitro hybrid object. Each `OnramperClient`
|
|
7
|
+
* owns its own instance, so its listeners and the underlying SDK client are
|
|
8
|
+
* isolated per client and torn down by `destroy()` → `dispose()`.
|
|
9
|
+
*/
|
|
10
|
+
export function createOnramperNative() {
|
|
11
|
+
// iOS-only in this release. Fail with a clear message rather than the opaque
|
|
12
|
+
// "hybrid object not found" Nitro would throw on platforms without a native impl.
|
|
13
|
+
if (Platform.OS !== 'ios') {
|
|
14
|
+
throw new Error(`Onramper React Native is iOS-only in this release; it is not supported on ${Platform.OS}.`);
|
|
15
|
+
}
|
|
16
|
+
return NitroModules.createHybridObject('OnramperNitro');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=OnramperNative.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","NitroModules","createOnramperNative","OS","Error","createHybridObject"],"sourceRoot":"../../src","sources":["OnramperNative.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,YAAY,QAAQ,4BAA4B;AAGzD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAA,EAAkB;EACpD;EACA;EACA,IAAIF,QAAQ,CAACG,EAAE,KAAK,KAAK,EAAE;IACzB,MAAM,IAAIC,KAAK,CAAC,6EAA6EJ,QAAQ,CAACG,EAAE,GAAG,CAAC;EAC9G;EACA,OAAOF,YAAY,CAACI,kBAAkB,CAAgB,eAAe,CAAC;AACxE","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export class OnramperError extends Error {
|
|
4
|
+
constructor(payload) {
|
|
5
|
+
super(payload.message);
|
|
6
|
+
this.name = 'OnramperError';
|
|
7
|
+
this.code = payload.code;
|
|
8
|
+
this.info = payload.info;
|
|
9
|
+
}
|
|
10
|
+
static from(value) {
|
|
11
|
+
if (value instanceof OnramperError) return value;
|
|
12
|
+
if (value && typeof value === 'object') {
|
|
13
|
+
// Structured errors (from the `.failed` state) arrive as a plain
|
|
14
|
+
// `{ code, message, info? }` object. Thrown promise rejections surface
|
|
15
|
+
// as a JS Error with just a message; we default the code in that case
|
|
16
|
+
// (the structured error is also available on `client.state` / lastError).
|
|
17
|
+
const v = value;
|
|
18
|
+
return new OnramperError({
|
|
19
|
+
code: v.code ?? 'unrecoverable',
|
|
20
|
+
message: v.message ?? 'Unknown error',
|
|
21
|
+
info: v.info
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return new OnramperError({
|
|
25
|
+
code: 'unrecoverable',
|
|
26
|
+
message: String(value)
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["OnramperError","Error","constructor","payload","message","name","code","info","from","value","v","String"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;AAyCA,OAAO,MAAMA,aAAa,SAASC,KAAK,CAAiC;EAIvEC,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,IAAI,GAAGJ,OAAO,CAACI,IAAI;EAC1B;EAEA,OAAOC,IAAIA,CAACC,KAAc,EAAiB;IACzC,IAAIA,KAAK,YAAYT,aAAa,EAAE,OAAOS,KAAK;IAChD,IAAIA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MACtC;MACA;MACA;MACA;MACA,MAAMC,CAAC,GAAGD,KAA4E;MACtF,OAAO,IAAIT,aAAa,CAAC;QACvBM,IAAI,EAAGI,CAAC,CAACJ,IAAI,IAAI,eAAqC;QACtDF,OAAO,EAAEM,CAAC,CAACN,OAAO,IAAI,eAAe;QACrCG,IAAI,EAAEG,CAAC,CAACH;MACV,CAAC,CAAC;IACJ;IACA,OAAO,IAAIP,aAAa,CAAC;MAAEM,IAAI,EAAE,eAAe;MAAEF,OAAO,EAAEO,MAAM,CAACF,KAAK;IAAE,CAAC,CAAC;EAC7E;AACF","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["events.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["OnramperClient","OnramperCheckoutButtonView","OnramperError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;;AAEA,SAASA,cAAc,QAAQ,qBAAkB;AAEjD,SAASC,0BAA0B,QAAQ,iCAA8B;AAEzE,SAASC,aAAa,QAAQ,aAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/OnramperCheckoutButton.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/OnramperNitro.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|