@onramper/onramper-react-native 1.2.2-1 → 1.3.0
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 +193 -0
- package/README.md +45 -3
- 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 +107 -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 +3560 -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 +107 -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 +107 -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 +3560 -2684
- package/ios/Frameworks/OnramperSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/OnramperSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/OnramperSDK.yml +3523 -2651
- package/ios/HybridOnramperCheckoutButton.swift +1 -1
- package/ios/HybridOnramperNitro.swift +140 -78
- package/ios/OnramperSDKBridge.swift +19 -2
- package/ios/PreparedIntentRegistry.swift +124 -6
- package/ios/SDKLogRelay.swift +41 -0
- package/lib/commonjs/OnramperClient.js +66 -5
- 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/module/OnramperClient.js +66 -5
- 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/typescript/commonjs/src/OnramperClient.d.ts +5 -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/OnramperNitro.nitro.d.ts +3 -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/OnramperClient.d.ts +5 -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/OnramperNitro.nitro.d.ts +3 -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 +3 -3
- package/nitrogen/generated/ios/OnramperReactNative-Swift-Cxx-Bridge.hpp +7 -7
- package/nitrogen/generated/ios/c++/HybridOnramperNitroSpecSwift.hpp +6 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +5 -5
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridOnramperNitroSpec_cxx.swift +27 -11
- package/nitrogen/generated/ios/swift/OnramperNitroConfig.swift +16 -6
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridOnramperNitroSpec.hpp +1 -0
- package/nitrogen/generated/shared/c++/OnramperNitroConfig.hpp +10 -2
- package/package.json +3 -2
- package/src/OnramperClient.ts +67 -4
- package/src/errors.ts +29 -6
- package/src/events.ts +5 -0
- package/src/index.ts +3 -0
- package/src/specs/OnramperNitro.nitro.ts +3 -0
- package/src/types.ts +36 -3
|
@@ -30,9 +30,23 @@ class OnramperClient {
|
|
|
30
30
|
// Resolved when the constructor-issued configure() completes. Public methods
|
|
31
31
|
// that need the native client await this first.
|
|
32
32
|
|
|
33
|
+
destroyed = false;
|
|
33
34
|
constructor(config) {
|
|
35
|
+
if (config.logHandler) {
|
|
36
|
+
const handler = config.logHandler;
|
|
37
|
+
this.native.setLogListener(json => {
|
|
38
|
+
if (this.destroyed) return;
|
|
39
|
+
try {
|
|
40
|
+
handler(JSON.parse(json));
|
|
41
|
+
} catch {
|
|
42
|
+
// Diagnostics must never interrupt checkout; do not log callback data.
|
|
43
|
+
console.warn('Onramper logHandler failed.');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
34
47
|
// Single native state callback → update the mirror + fan out to listeners.
|
|
35
48
|
this.native.setStateListener(json => {
|
|
49
|
+
if (this.destroyed) return;
|
|
36
50
|
const s = JSON.parse(json);
|
|
37
51
|
this.state = s;
|
|
38
52
|
if (s.kind === 'failed') this.lastError = _errors.OnramperError.from(s.error);
|
|
@@ -42,6 +56,7 @@ class OnramperClient {
|
|
|
42
56
|
// Single native checkout-event callback → keep the transaction ID mirror
|
|
43
57
|
// synchronized at finalization, then fan out to checkout listeners.
|
|
44
58
|
this.native.setEventListener(json => {
|
|
59
|
+
if (this.destroyed) return;
|
|
45
60
|
const e = JSON.parse(json);
|
|
46
61
|
if (e.type === 'checkoutFinalized') {
|
|
47
62
|
this.updateCurrentTransactionId(e.response.onramperTransactionId);
|
|
@@ -49,6 +64,7 @@ class OnramperClient {
|
|
|
49
64
|
for (const fn of this.eventListeners) fn(e);
|
|
50
65
|
});
|
|
51
66
|
this.native.setTransactionIdListener(transactionId => {
|
|
67
|
+
if (this.destroyed) return;
|
|
52
68
|
// The SDK transiently publishes nil while re-preparing after the payment
|
|
53
69
|
// sheet is dismissed. The finalized transaction ID remains durable across
|
|
54
70
|
// that attempt change; only explicit reset()/signOut() clear the JS mirror.
|
|
@@ -59,7 +75,9 @@ class OnramperClient {
|
|
|
59
75
|
// Nitro stores the async callback natively and awaits it directly — no
|
|
60
76
|
// event round-trip needed.
|
|
61
77
|
this.native.setSessionExpirationHandler(async () => {
|
|
78
|
+
this.assertActive();
|
|
62
79
|
const creds = await config.onSessionExpired();
|
|
80
|
+
this.assertActive();
|
|
63
81
|
return {
|
|
64
82
|
sessionId: creds.sessionId,
|
|
65
83
|
sessionToken: creds.sessionToken
|
|
@@ -70,20 +88,33 @@ class OnramperClient {
|
|
|
70
88
|
clientId: config.clientId,
|
|
71
89
|
environment: config.environment,
|
|
72
90
|
theme: config.theme ?? 'system',
|
|
73
|
-
logLevel: config.logLevel ?? 'off'
|
|
91
|
+
logLevel: config.logLevel ?? 'off',
|
|
92
|
+
isEventLoggingEnabled: config.isEventLoggingEnabled ?? false,
|
|
93
|
+
isEventConsoleLoggingEnabled: config.isEventConsoleLoggingEnabled ?? false
|
|
74
94
|
}).catch(e => {
|
|
75
95
|
const err = _errors.OnramperError.from(e);
|
|
76
|
-
this.lastError = err;
|
|
96
|
+
if (!this.destroyed) this.lastError = err;
|
|
77
97
|
throw err;
|
|
78
98
|
});
|
|
79
99
|
// Swallow the unhandled-rejection warning when no one awaits .configured
|
|
80
100
|
// before calling initialize(). The error still surfaces via initialize().
|
|
81
101
|
this.configured.catch(() => undefined);
|
|
82
102
|
}
|
|
103
|
+
assertActive() {
|
|
104
|
+
if (this.destroyed) {
|
|
105
|
+
throw new _errors.OnramperError({
|
|
106
|
+
code: 'clientDestroyed',
|
|
107
|
+
message: 'This OnramperClient has been destroyed. Create a new client before making SDK calls.',
|
|
108
|
+
userMessage: 'This checkout session has ended. Please reopen checkout.'
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
83
112
|
updateCurrentTransactionId(next) {
|
|
113
|
+
if (this.destroyed) return;
|
|
84
114
|
if (next === this.currentTransactionId) return;
|
|
85
115
|
this.currentTransactionId = next;
|
|
86
116
|
for (const fn of [...this.transactionIdListeners]) {
|
|
117
|
+
if (this.destroyed) break;
|
|
87
118
|
try {
|
|
88
119
|
fn(next);
|
|
89
120
|
} catch (error) {
|
|
@@ -93,18 +124,26 @@ class OnramperClient {
|
|
|
93
124
|
}
|
|
94
125
|
async initialize(creds) {
|
|
95
126
|
try {
|
|
127
|
+
this.assertActive();
|
|
96
128
|
await this.configured;
|
|
129
|
+
this.assertActive();
|
|
97
130
|
await this.native.initialize(creds.sessionId, creds.sessionToken);
|
|
131
|
+
this.assertActive();
|
|
98
132
|
} catch (e) {
|
|
133
|
+
this.assertActive();
|
|
99
134
|
throw _errors.OnramperError.from(e);
|
|
100
135
|
}
|
|
101
136
|
}
|
|
102
137
|
async reset() {
|
|
103
138
|
try {
|
|
139
|
+
this.assertActive();
|
|
104
140
|
await this.configured;
|
|
141
|
+
this.assertActive();
|
|
105
142
|
await this.native.reset();
|
|
143
|
+
this.assertActive();
|
|
106
144
|
this.updateCurrentTransactionId(null);
|
|
107
145
|
} catch (e) {
|
|
146
|
+
this.assertActive();
|
|
108
147
|
throw _errors.OnramperError.from(e);
|
|
109
148
|
}
|
|
110
149
|
}
|
|
@@ -117,10 +156,14 @@ class OnramperClient {
|
|
|
117
156
|
*/
|
|
118
157
|
async signOut() {
|
|
119
158
|
try {
|
|
159
|
+
this.assertActive();
|
|
120
160
|
await this.configured;
|
|
161
|
+
this.assertActive();
|
|
121
162
|
await this.native.signOut();
|
|
163
|
+
this.assertActive();
|
|
122
164
|
this.updateCurrentTransactionId(null);
|
|
123
165
|
} catch (e) {
|
|
166
|
+
this.assertActive();
|
|
124
167
|
throw _errors.OnramperError.from(e);
|
|
125
168
|
}
|
|
126
169
|
}
|
|
@@ -129,6 +172,8 @@ class OnramperClient {
|
|
|
129
172
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
130
173
|
* to render plus the quote. The button handles login / finalize / webview
|
|
131
174
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
175
|
+
* A newer preparation, reset, or sign-out invalidates older unmounted buttons
|
|
176
|
+
* and rejects obsolete in-flight preparations with `intentInvalidated`.
|
|
132
177
|
*
|
|
133
178
|
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
134
179
|
* screens with values you already know about the user. It is best-effort and
|
|
@@ -142,8 +187,11 @@ class OnramperClient {
|
|
|
142
187
|
*/
|
|
143
188
|
async getCheckoutRequirements(request, buttonStyle = {}, prefill = {}) {
|
|
144
189
|
try {
|
|
190
|
+
this.assertActive();
|
|
145
191
|
await this.configured;
|
|
192
|
+
this.assertActive();
|
|
146
193
|
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(prefill), JSON.stringify(buttonStyle));
|
|
194
|
+
this.assertActive();
|
|
147
195
|
const quote = JSON.parse(result.quoteJson);
|
|
148
196
|
const button = /*#__PURE__*/(0, _react.createElement)(_CheckoutButton.CheckoutButton, {
|
|
149
197
|
intentHandle: result.intentHandle
|
|
@@ -153,17 +201,26 @@ class OnramperClient {
|
|
|
153
201
|
quote
|
|
154
202
|
};
|
|
155
203
|
} catch (e) {
|
|
204
|
+
this.assertActive();
|
|
156
205
|
throw _errors.OnramperError.from(e);
|
|
157
206
|
}
|
|
158
207
|
}
|
|
159
208
|
|
|
160
209
|
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
161
|
-
cancelPreparedIntent(intentHandle) {
|
|
162
|
-
|
|
210
|
+
async cancelPreparedIntent(intentHandle) {
|
|
211
|
+
try {
|
|
212
|
+
this.assertActive();
|
|
213
|
+
await this.native.cancelPreparedIntent(intentHandle);
|
|
214
|
+
this.assertActive();
|
|
215
|
+
} catch (e) {
|
|
216
|
+
this.assertActive();
|
|
217
|
+
throw _errors.OnramperError.from(e);
|
|
218
|
+
}
|
|
163
219
|
}
|
|
164
220
|
|
|
165
221
|
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
166
222
|
addStateListener(fn) {
|
|
223
|
+
this.assertActive();
|
|
167
224
|
this.stateListeners.add(fn);
|
|
168
225
|
return () => {
|
|
169
226
|
this.stateListeners.delete(fn);
|
|
@@ -172,6 +229,7 @@ class OnramperClient {
|
|
|
172
229
|
|
|
173
230
|
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
174
231
|
addTransactionIdListener(fn) {
|
|
232
|
+
this.assertActive();
|
|
175
233
|
this.transactionIdListeners.add(fn);
|
|
176
234
|
return () => {
|
|
177
235
|
this.transactionIdListeners.delete(fn);
|
|
@@ -180,6 +238,7 @@ class OnramperClient {
|
|
|
180
238
|
|
|
181
239
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
182
240
|
addEventListener(name, fn) {
|
|
241
|
+
this.assertActive();
|
|
183
242
|
const wrapper = e => {
|
|
184
243
|
if (e.type === name) fn(e);
|
|
185
244
|
};
|
|
@@ -189,8 +248,10 @@ class OnramperClient {
|
|
|
189
248
|
};
|
|
190
249
|
}
|
|
191
250
|
|
|
192
|
-
/**
|
|
251
|
+
/** Idempotent teardown. Further operations reject with `clientDestroyed`; create a new client to restart. */
|
|
193
252
|
destroy() {
|
|
253
|
+
if (this.destroyed) return;
|
|
254
|
+
this.destroyed = true;
|
|
194
255
|
this.stateListeners.clear();
|
|
195
256
|
this.eventListeners.clear();
|
|
196
257
|
this.transactionIdListeners.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_CheckoutButton","_OnramperNative","_errors","OnramperClient","state","kind","lastError","currentTransactionId","native","createOnramperNative","stateListeners","Set","eventListeners","transactionIdListeners","constructor","config","
|
|
1
|
+
{"version":3,"names":["_react","require","_CheckoutButton","_OnramperNative","_errors","OnramperClient","state","kind","lastError","currentTransactionId","native","createOnramperNative","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","dispose","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":[]}
|
|
@@ -26,9 +26,23 @@ export class OnramperClient {
|
|
|
26
26
|
// Resolved when the constructor-issued configure() completes. Public methods
|
|
27
27
|
// that need the native client await this first.
|
|
28
28
|
|
|
29
|
+
destroyed = false;
|
|
29
30
|
constructor(config) {
|
|
31
|
+
if (config.logHandler) {
|
|
32
|
+
const handler = config.logHandler;
|
|
33
|
+
this.native.setLogListener(json => {
|
|
34
|
+
if (this.destroyed) return;
|
|
35
|
+
try {
|
|
36
|
+
handler(JSON.parse(json));
|
|
37
|
+
} catch {
|
|
38
|
+
// Diagnostics must never interrupt checkout; do not log callback data.
|
|
39
|
+
console.warn('Onramper logHandler failed.');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
30
43
|
// Single native state callback → update the mirror + fan out to listeners.
|
|
31
44
|
this.native.setStateListener(json => {
|
|
45
|
+
if (this.destroyed) return;
|
|
32
46
|
const s = JSON.parse(json);
|
|
33
47
|
this.state = s;
|
|
34
48
|
if (s.kind === 'failed') this.lastError = OnramperError.from(s.error);
|
|
@@ -38,6 +52,7 @@ export class OnramperClient {
|
|
|
38
52
|
// Single native checkout-event callback → keep the transaction ID mirror
|
|
39
53
|
// synchronized at finalization, then fan out to checkout listeners.
|
|
40
54
|
this.native.setEventListener(json => {
|
|
55
|
+
if (this.destroyed) return;
|
|
41
56
|
const e = JSON.parse(json);
|
|
42
57
|
if (e.type === 'checkoutFinalized') {
|
|
43
58
|
this.updateCurrentTransactionId(e.response.onramperTransactionId);
|
|
@@ -45,6 +60,7 @@ export class OnramperClient {
|
|
|
45
60
|
for (const fn of this.eventListeners) fn(e);
|
|
46
61
|
});
|
|
47
62
|
this.native.setTransactionIdListener(transactionId => {
|
|
63
|
+
if (this.destroyed) return;
|
|
48
64
|
// The SDK transiently publishes nil while re-preparing after the payment
|
|
49
65
|
// sheet is dismissed. The finalized transaction ID remains durable across
|
|
50
66
|
// that attempt change; only explicit reset()/signOut() clear the JS mirror.
|
|
@@ -55,7 +71,9 @@ export class OnramperClient {
|
|
|
55
71
|
// Nitro stores the async callback natively and awaits it directly — no
|
|
56
72
|
// event round-trip needed.
|
|
57
73
|
this.native.setSessionExpirationHandler(async () => {
|
|
74
|
+
this.assertActive();
|
|
58
75
|
const creds = await config.onSessionExpired();
|
|
76
|
+
this.assertActive();
|
|
59
77
|
return {
|
|
60
78
|
sessionId: creds.sessionId,
|
|
61
79
|
sessionToken: creds.sessionToken
|
|
@@ -66,20 +84,33 @@ export class OnramperClient {
|
|
|
66
84
|
clientId: config.clientId,
|
|
67
85
|
environment: config.environment,
|
|
68
86
|
theme: config.theme ?? 'system',
|
|
69
|
-
logLevel: config.logLevel ?? 'off'
|
|
87
|
+
logLevel: config.logLevel ?? 'off',
|
|
88
|
+
isEventLoggingEnabled: config.isEventLoggingEnabled ?? false,
|
|
89
|
+
isEventConsoleLoggingEnabled: config.isEventConsoleLoggingEnabled ?? false
|
|
70
90
|
}).catch(e => {
|
|
71
91
|
const err = OnramperError.from(e);
|
|
72
|
-
this.lastError = err;
|
|
92
|
+
if (!this.destroyed) this.lastError = err;
|
|
73
93
|
throw err;
|
|
74
94
|
});
|
|
75
95
|
// Swallow the unhandled-rejection warning when no one awaits .configured
|
|
76
96
|
// before calling initialize(). The error still surfaces via initialize().
|
|
77
97
|
this.configured.catch(() => undefined);
|
|
78
98
|
}
|
|
99
|
+
assertActive() {
|
|
100
|
+
if (this.destroyed) {
|
|
101
|
+
throw new OnramperError({
|
|
102
|
+
code: 'clientDestroyed',
|
|
103
|
+
message: 'This OnramperClient has been destroyed. Create a new client before making SDK calls.',
|
|
104
|
+
userMessage: 'This checkout session has ended. Please reopen checkout.'
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
79
108
|
updateCurrentTransactionId(next) {
|
|
109
|
+
if (this.destroyed) return;
|
|
80
110
|
if (next === this.currentTransactionId) return;
|
|
81
111
|
this.currentTransactionId = next;
|
|
82
112
|
for (const fn of [...this.transactionIdListeners]) {
|
|
113
|
+
if (this.destroyed) break;
|
|
83
114
|
try {
|
|
84
115
|
fn(next);
|
|
85
116
|
} catch (error) {
|
|
@@ -89,18 +120,26 @@ export class OnramperClient {
|
|
|
89
120
|
}
|
|
90
121
|
async initialize(creds) {
|
|
91
122
|
try {
|
|
123
|
+
this.assertActive();
|
|
92
124
|
await this.configured;
|
|
125
|
+
this.assertActive();
|
|
93
126
|
await this.native.initialize(creds.sessionId, creds.sessionToken);
|
|
127
|
+
this.assertActive();
|
|
94
128
|
} catch (e) {
|
|
129
|
+
this.assertActive();
|
|
95
130
|
throw OnramperError.from(e);
|
|
96
131
|
}
|
|
97
132
|
}
|
|
98
133
|
async reset() {
|
|
99
134
|
try {
|
|
135
|
+
this.assertActive();
|
|
100
136
|
await this.configured;
|
|
137
|
+
this.assertActive();
|
|
101
138
|
await this.native.reset();
|
|
139
|
+
this.assertActive();
|
|
102
140
|
this.updateCurrentTransactionId(null);
|
|
103
141
|
} catch (e) {
|
|
142
|
+
this.assertActive();
|
|
104
143
|
throw OnramperError.from(e);
|
|
105
144
|
}
|
|
106
145
|
}
|
|
@@ -113,10 +152,14 @@ export class OnramperClient {
|
|
|
113
152
|
*/
|
|
114
153
|
async signOut() {
|
|
115
154
|
try {
|
|
155
|
+
this.assertActive();
|
|
116
156
|
await this.configured;
|
|
157
|
+
this.assertActive();
|
|
117
158
|
await this.native.signOut();
|
|
159
|
+
this.assertActive();
|
|
118
160
|
this.updateCurrentTransactionId(null);
|
|
119
161
|
} catch (e) {
|
|
162
|
+
this.assertActive();
|
|
120
163
|
throw OnramperError.from(e);
|
|
121
164
|
}
|
|
122
165
|
}
|
|
@@ -125,6 +168,8 @@ export class OnramperClient {
|
|
|
125
168
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
126
169
|
* to render plus the quote. The button handles login / finalize / webview
|
|
127
170
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
171
|
+
* A newer preparation, reset, or sign-out invalidates older unmounted buttons
|
|
172
|
+
* and rejects obsolete in-flight preparations with `intentInvalidated`.
|
|
128
173
|
*
|
|
129
174
|
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
130
175
|
* screens with values you already know about the user. It is best-effort and
|
|
@@ -138,8 +183,11 @@ export class OnramperClient {
|
|
|
138
183
|
*/
|
|
139
184
|
async getCheckoutRequirements(request, buttonStyle = {}, prefill = {}) {
|
|
140
185
|
try {
|
|
186
|
+
this.assertActive();
|
|
141
187
|
await this.configured;
|
|
188
|
+
this.assertActive();
|
|
142
189
|
const result = await this.native.getCheckoutRequirements(JSON.stringify(request), JSON.stringify(prefill), JSON.stringify(buttonStyle));
|
|
190
|
+
this.assertActive();
|
|
143
191
|
const quote = JSON.parse(result.quoteJson);
|
|
144
192
|
const button = /*#__PURE__*/createElement(CheckoutButton, {
|
|
145
193
|
intentHandle: result.intentHandle
|
|
@@ -149,17 +197,26 @@ export class OnramperClient {
|
|
|
149
197
|
quote
|
|
150
198
|
};
|
|
151
199
|
} catch (e) {
|
|
200
|
+
this.assertActive();
|
|
152
201
|
throw OnramperError.from(e);
|
|
153
202
|
}
|
|
154
203
|
}
|
|
155
204
|
|
|
156
205
|
/** Discards a prepared intent (e.g. if the user navigates away before checkout). */
|
|
157
|
-
cancelPreparedIntent(intentHandle) {
|
|
158
|
-
|
|
206
|
+
async cancelPreparedIntent(intentHandle) {
|
|
207
|
+
try {
|
|
208
|
+
this.assertActive();
|
|
209
|
+
await this.native.cancelPreparedIntent(intentHandle);
|
|
210
|
+
this.assertActive();
|
|
211
|
+
} catch (e) {
|
|
212
|
+
this.assertActive();
|
|
213
|
+
throw OnramperError.from(e);
|
|
214
|
+
}
|
|
159
215
|
}
|
|
160
216
|
|
|
161
217
|
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
162
218
|
addStateListener(fn) {
|
|
219
|
+
this.assertActive();
|
|
163
220
|
this.stateListeners.add(fn);
|
|
164
221
|
return () => {
|
|
165
222
|
this.stateListeners.delete(fn);
|
|
@@ -168,6 +225,7 @@ export class OnramperClient {
|
|
|
168
225
|
|
|
169
226
|
/** Subscribe to the durable Onramper transaction ID. Successful reset/signOut publish null. */
|
|
170
227
|
addTransactionIdListener(fn) {
|
|
228
|
+
this.assertActive();
|
|
171
229
|
this.transactionIdListeners.add(fn);
|
|
172
230
|
return () => {
|
|
173
231
|
this.transactionIdListeners.delete(fn);
|
|
@@ -176,6 +234,7 @@ export class OnramperClient {
|
|
|
176
234
|
|
|
177
235
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
178
236
|
addEventListener(name, fn) {
|
|
237
|
+
this.assertActive();
|
|
179
238
|
const wrapper = e => {
|
|
180
239
|
if (e.type === name) fn(e);
|
|
181
240
|
};
|
|
@@ -185,8 +244,10 @@ export class OnramperClient {
|
|
|
185
244
|
};
|
|
186
245
|
}
|
|
187
246
|
|
|
188
|
-
/**
|
|
247
|
+
/** Idempotent teardown. Further operations reject with `clientDestroyed`; create a new client to restart. */
|
|
189
248
|
destroy() {
|
|
249
|
+
if (this.destroyed) return;
|
|
250
|
+
this.destroyed = true;
|
|
190
251
|
this.stateListeners.clear();
|
|
191
252
|
this.eventListeners.clear();
|
|
192
253
|
this.transactionIdListeners.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createElement","CheckoutButton","createOnramperNative","OnramperError","OnramperClient","state","kind","lastError","currentTransactionId","native","stateListeners","Set","eventListeners","transactionIdListeners","constructor","config","
|
|
1
|
+
{"version":3,"names":["createElement","CheckoutButton","createOnramperNative","OnramperError","OnramperClient","state","kind","lastError","currentTransactionId","native","stateListeners","Set","eventListeners","transactionIdListeners","destroyed","constructor","config","logHandler","handler","setLogListener","json","JSON","parse","console","warn","setStateListener","s","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","intentHandle","cancelPreparedIntent","addStateListener","add","delete","addTransactionIdListener","addEventListener","name","wrapper","destroy","clear","dispose"],"sourceRoot":"../../src","sources":["OnramperClient.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/errors.js
CHANGED
|
@@ -5,20 +5,34 @@ export class OnramperError extends Error {
|
|
|
5
5
|
super(payload.message);
|
|
6
6
|
this.name = 'OnramperError';
|
|
7
7
|
this.code = payload.code;
|
|
8
|
+
this.userMessage = payload.userMessage ?? 'Something went wrong. Please try again.';
|
|
9
|
+
this.supportCode = payload.supportCode ?? payload.code;
|
|
8
10
|
this.info = payload.info;
|
|
9
11
|
}
|
|
10
12
|
static from(value) {
|
|
11
13
|
if (value instanceof OnramperError) return value;
|
|
14
|
+
// Nitro transports Swift exceptions as message-only JS Errors. Our native
|
|
15
|
+
// bridge encodes SDK errors explicitly so Promise rejections retain the
|
|
16
|
+
// same fields as failed events, without consulting unrelated client state.
|
|
17
|
+
const message = value instanceof Error ? value.message : typeof value === 'string' ? value : undefined;
|
|
18
|
+
if (message?.startsWith('ONRAMPER_ERROR:')) {
|
|
19
|
+
try {
|
|
20
|
+
const payload = JSON.parse(message.slice('ONRAMPER_ERROR:'.length));
|
|
21
|
+
if (payload && typeof payload.code === 'string' && typeof payload.message === 'string') {
|
|
22
|
+
return OnramperError.from(payload);
|
|
23
|
+
}
|
|
24
|
+
} catch {
|
|
25
|
+
// A malformed/non-SDK error falls back to the ordinary error path.
|
|
26
|
+
}
|
|
27
|
+
}
|
|
12
28
|
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
29
|
const v = value;
|
|
18
30
|
return new OnramperError({
|
|
19
31
|
code: v.code ?? 'unrecoverable',
|
|
20
32
|
message: v.message ?? 'Unknown error',
|
|
21
|
-
info: v.info
|
|
33
|
+
info: v.info,
|
|
34
|
+
userMessage: typeof v.userMessage === 'string' ? v.userMessage : undefined,
|
|
35
|
+
supportCode: typeof v.supportCode === 'string' ? v.supportCode : undefined
|
|
22
36
|
});
|
|
23
37
|
}
|
|
24
38
|
return new OnramperError({
|
package/lib/module/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OnramperError","Error","constructor","payload","message","name","code","info","from","value","v","String"],"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"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;AAgDA,OAAO,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","ignoreList":[]}
|
|
@@ -23,7 +23,9 @@ export declare class OnramperClient {
|
|
|
23
23
|
private readonly eventListeners;
|
|
24
24
|
private readonly transactionIdListeners;
|
|
25
25
|
private readonly configured;
|
|
26
|
+
private destroyed;
|
|
26
27
|
constructor(config: OnramperConfiguration);
|
|
28
|
+
private assertActive;
|
|
27
29
|
private updateCurrentTransactionId;
|
|
28
30
|
initialize(creds: SessionCredentials): Promise<void>;
|
|
29
31
|
reset(): Promise<void>;
|
|
@@ -38,6 +40,8 @@ export declare class OnramperClient {
|
|
|
38
40
|
* Fetches checkout requirements + quote and returns a native checkout button
|
|
39
41
|
* to render plus the quote. The button handles login / finalize / webview
|
|
40
42
|
* internally; outcomes surface via the event stream (`addEventListener`).
|
|
43
|
+
* A newer preparation, reset, or sign-out invalidates older unmounted buttons
|
|
44
|
+
* and rejects obsolete in-flight preparations with `intentInvalidated`.
|
|
41
45
|
*
|
|
42
46
|
* Pass `prefill` to pre-populate the OnramperID sign-in and additional-info
|
|
43
47
|
* screens with values you already know about the user. It is best-effort and
|
|
@@ -58,7 +62,7 @@ export declare class OnramperClient {
|
|
|
58
62
|
addTransactionIdListener(fn: (transactionId: string | null) => void): () => void;
|
|
59
63
|
/** Subscribe to a specific checkout event. Returns an unsubscribe function. */
|
|
60
64
|
addEventListener<K extends EventName>(name: K, fn: (e: EventPayload<K>) => void): () => void;
|
|
61
|
-
/**
|
|
65
|
+
/** Idempotent teardown. Further operations reject with `clientDestroyed`; create a new client to restart. */
|
|
62
66
|
destroy(): void;
|
|
63
67
|
}
|
|
64
68
|
//# sourceMappingURL=OnramperClient.d.ts.map
|
|
@@ -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,
|
|
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,EAErB,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;IAC3C,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,qBAAqB;IAuEzC,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,0BAA0B;IAe5B,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAc9B;;;;;;;;;;;;;;;;OAgBG;IACG,uBAAuB,CAC3B,OAAO,EAAE,eAAe,EACxB,WAAW,GAAE,mBAAwB,EACrC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,6BAA6B,CAAC;IAoBzC,oFAAoF;IAC9E,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAQhE,+FAA+F;IAC/F,wBAAwB,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAQhF,+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;IAW5F,6GAA6G;IAC7G,OAAO,IAAI,IAAI;CAQhB"}
|