@oobit/react-native-sdk 1.0.6 → 1.0.7
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/dist/WidgetSDK.d.ts.map +1 -1
- package/dist/WidgetSDK.js +21 -47
- package/dist/WidgetSDK.js.map +1 -1
- package/dist/types.d.ts +21 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -1
- package/src/WidgetSDK.tsx +22 -77
- package/src/types.ts +27 -4
package/dist/WidgetSDK.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetSDK.d.ts","sourceRoot":"","sources":["../src/WidgetSDK.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"WidgetSDK.d.ts","sourceRoot":"","sources":["../src/WidgetSDK.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAWf,OAAO,EAAyC,eAAe,EAAE,MAAM,SAAS,CAAC;AAIjF,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,SAAS,sFAoSrB,CAAC"}
|
package/dist/WidgetSDK.js
CHANGED
|
@@ -41,10 +41,9 @@ exports.WidgetSDK = void 0;
|
|
|
41
41
|
const react_1 = __importStar(require("react"));
|
|
42
42
|
const react_native_1 = require("react-native");
|
|
43
43
|
const react_native_webview_1 = require("react-native-webview");
|
|
44
|
-
const biometricUtils_1 = require("./biometricUtils");
|
|
45
44
|
const config_1 = require("./config");
|
|
46
|
-
const cryptoUtils_1 = require("./cryptoUtils");
|
|
47
45
|
const walletUtils_1 = require("./walletUtils");
|
|
46
|
+
const Clipboard = __importStar(require("expo-clipboard"));
|
|
48
47
|
exports.WidgetSDK = (0, react_1.forwardRef)(({ accessToken, userWalletAddress, environment, onReady, onCardCreated, onError, onClose, onTransactionRequested, }, ref) => {
|
|
49
48
|
const webViewRef = (0, react_1.useRef)(null);
|
|
50
49
|
const [walletAvailable, setWalletAvailable] = (0, react_1.useState)(false);
|
|
@@ -110,8 +109,8 @@ exports.WidgetSDK = (0, react_1.forwardRef)(({ accessToken, userWalletAddress, e
|
|
|
110
109
|
console.error("[WidgetSDK] Access token expired");
|
|
111
110
|
onError?.("TOKEN_EXPIRED", "Access token has expired");
|
|
112
111
|
break;
|
|
113
|
-
case "widget:
|
|
114
|
-
|
|
112
|
+
case "widget:copy-to-clipboard":
|
|
113
|
+
handleCopyToClipboard(message);
|
|
115
114
|
break;
|
|
116
115
|
default:
|
|
117
116
|
console.warn("[WidgetSDK] Unknown message type:", message);
|
|
@@ -174,55 +173,30 @@ exports.WidgetSDK = (0, react_1.forwardRef)(({ accessToken, userWalletAddress, e
|
|
|
174
173
|
onTransactionRequested?.(token, cryptoAmount, depositAddress, depositAddressTag);
|
|
175
174
|
};
|
|
176
175
|
/**
|
|
177
|
-
* Handle
|
|
178
|
-
*
|
|
179
|
-
* 2. Generate cryptographically linked sessionId + secretKey pair
|
|
180
|
-
* 3. Send credentials back to widget for API call and decryption
|
|
176
|
+
* Handle clipboard copy request from widget
|
|
177
|
+
* Copies text to device clipboard and sends result back to widget
|
|
181
178
|
*/
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
console.log("[WidgetSDK] Card details requested, initiating biometric auth...");
|
|
187
|
-
// Step 1: Authenticate with biometrics
|
|
188
|
-
const biometricResult = await (0, biometricUtils_1.authenticateWithBiometrics)("Authenticate to view card details");
|
|
189
|
-
if (!biometricResult.success) {
|
|
190
|
-
console.log("[WidgetSDK] Biometric auth failed:", biometricResult.error);
|
|
191
|
-
const failedMessage = {
|
|
192
|
-
type: "native:biometric-failed",
|
|
193
|
-
payload: {
|
|
194
|
-
reason: biometricResult.error?.reason || "failed",
|
|
195
|
-
message: biometricResult.error?.message,
|
|
196
|
-
},
|
|
197
|
-
};
|
|
198
|
-
sendMessageToWidget(failedMessage);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
// Step 2: Generate session credentials
|
|
179
|
+
const handleCopyToClipboard = async (message) => {
|
|
180
|
+
const { text, label } = message.payload;
|
|
181
|
+
// Log only the label, never the actual text content (security)
|
|
182
|
+
console.log("[WidgetSDK] Copy to clipboard requested:", label || "unlabeled");
|
|
202
183
|
try {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
type: "native:card-details-session",
|
|
209
|
-
payload: {
|
|
210
|
-
sessionId,
|
|
211
|
-
secretKey: secretKeyHex,
|
|
212
|
-
},
|
|
213
|
-
};
|
|
214
|
-
sendMessageToWidget(sessionMessage);
|
|
184
|
+
await Clipboard.setStringAsync(text);
|
|
185
|
+
sendMessageToWidget({
|
|
186
|
+
type: "native:clipboard-result",
|
|
187
|
+
payload: { success: true, label },
|
|
188
|
+
});
|
|
215
189
|
}
|
|
216
190
|
catch (error) {
|
|
217
|
-
console.error("[WidgetSDK]
|
|
218
|
-
|
|
219
|
-
type: "native:
|
|
191
|
+
console.error("[WidgetSDK] Clipboard copy failed:", error);
|
|
192
|
+
sendMessageToWidget({
|
|
193
|
+
type: "native:clipboard-result",
|
|
220
194
|
payload: {
|
|
221
|
-
|
|
222
|
-
|
|
195
|
+
success: false,
|
|
196
|
+
label,
|
|
197
|
+
error: "Clipboard operation failed",
|
|
223
198
|
},
|
|
224
|
-
};
|
|
225
|
-
sendMessageToWidget(failedMessage);
|
|
199
|
+
});
|
|
226
200
|
}
|
|
227
201
|
};
|
|
228
202
|
/**
|
package/dist/WidgetSDK.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetSDK.js","sourceRoot":"","sources":["../src/WidgetSDK.tsx"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+CAOe;AACf,+CAOsB;AACtB,+DAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"WidgetSDK.js","sourceRoot":"","sources":["../src/WidgetSDK.tsx"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,12 +12,12 @@ export interface DepositToken {
|
|
|
12
12
|
iconUrl: string | null;
|
|
13
13
|
networkName: string;
|
|
14
14
|
}
|
|
15
|
-
export type WidgetMessageType = "widget:ready" | "widget:open-wallet" | "widget:card-created" | "widget:error" | "widget:close" | "widget:transaction-requested" | "widget:token-expired" | "widget:request-card-details-session";
|
|
15
|
+
export type WidgetMessageType = "widget:ready" | "widget:open-wallet" | "widget:card-created" | "widget:error" | "widget:close" | "widget:transaction-requested" | "widget:token-expired" | "widget:request-card-details-session" | "widget:copy-to-clipboard";
|
|
16
16
|
/**
|
|
17
17
|
* Native Message Types
|
|
18
18
|
* Messages sent from the native app to the web widget
|
|
19
19
|
*/
|
|
20
|
-
export type NativeMessageType = "native:platform-info" | "native:wallet-opened" | "native:back-pressed" | "native:navigate-back" | "native:card-details-session" | "native:biometric-failed";
|
|
20
|
+
export type NativeMessageType = "native:platform-info" | "native:wallet-opened" | "native:back-pressed" | "native:navigate-back" | "native:card-details-session" | "native:biometric-failed" | "native:clipboard-result";
|
|
21
21
|
export interface NativeBackPressedMessage {
|
|
22
22
|
type: "native:back-pressed";
|
|
23
23
|
timestamp: number;
|
|
@@ -53,7 +53,15 @@ export interface NativeBiometricFailedMessage {
|
|
|
53
53
|
message?: string;
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
-
export
|
|
56
|
+
export interface NativeClipboardResultMessage {
|
|
57
|
+
type: "native:clipboard-result";
|
|
58
|
+
payload: {
|
|
59
|
+
success: boolean;
|
|
60
|
+
label?: string;
|
|
61
|
+
error?: string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export type NativeMessage = NativeBackPressedMessage | NativeNavigateBackMessage | NativePlatformInfoMessage | NativeWalletOpenedMessage | NativeCardDetailsSessionMessage | NativeBiometricFailedMessage | NativeClipboardResultMessage;
|
|
57
65
|
export interface BaseWidgetMessage {
|
|
58
66
|
type: WidgetMessageType;
|
|
59
67
|
timestamp: number;
|
|
@@ -106,7 +114,14 @@ export interface RequestCardDetailsSessionMessage extends BaseWidgetMessage {
|
|
|
106
114
|
publicKey: string;
|
|
107
115
|
};
|
|
108
116
|
}
|
|
109
|
-
export
|
|
117
|
+
export interface CopyToClipboardMessage extends BaseWidgetMessage {
|
|
118
|
+
type: "widget:copy-to-clipboard";
|
|
119
|
+
payload: {
|
|
120
|
+
text: string;
|
|
121
|
+
label?: string;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export type WidgetMessage = WidgetReadyMessage | OpenWalletMessage | CardCreatedMessage | WidgetErrorMessage | WidgetCloseMessage | TransactionRequestedMessage | TokenExpiredMessage | RequestCardDetailsSessionMessage | CopyToClipboardMessage;
|
|
110
125
|
/**
|
|
111
126
|
* Widget environment configuration
|
|
112
127
|
* - 'development': Uses development/staging widget URL
|
|
@@ -161,11 +176,13 @@ export declare const MessageTypes: {
|
|
|
161
176
|
readonly TRANSACTION_REQUESTED: "widget:transaction-requested";
|
|
162
177
|
readonly TOKEN_EXPIRED: "widget:token-expired";
|
|
163
178
|
readonly REQUEST_CARD_DETAILS_SESSION: "widget:request-card-details-session";
|
|
179
|
+
readonly COPY_TO_CLIPBOARD: "widget:copy-to-clipboard";
|
|
164
180
|
readonly PLATFORM_INFO: "native:platform-info";
|
|
165
181
|
readonly WALLET_OPENED: "native:wallet-opened";
|
|
166
182
|
readonly BACK_PRESSED: "native:back-pressed";
|
|
167
183
|
readonly NAVIGATE_BACK: "native:navigate-back";
|
|
168
184
|
readonly CARD_DETAILS_SESSION: "native:card-details-session";
|
|
169
185
|
readonly BIOMETRIC_FAILED: "native:biometric-failed";
|
|
186
|
+
readonly CLIPBOARD_RESULT: "native:clipboard-result";
|
|
170
187
|
};
|
|
171
188
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,oBAAoB,GACpB,qBAAqB,GACrB,cAAc,GACd,cAAc,GACd,8BAA8B,GAC9B,sBAAsB,GACtB,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -35,6 +35,7 @@ exports.MessageTypes = {
|
|
|
35
35
|
TRANSACTION_REQUESTED: "widget:transaction-requested",
|
|
36
36
|
TOKEN_EXPIRED: "widget:token-expired",
|
|
37
37
|
REQUEST_CARD_DETAILS_SESSION: "widget:request-card-details-session",
|
|
38
|
+
COPY_TO_CLIPBOARD: "widget:copy-to-clipboard",
|
|
38
39
|
// Native → Widget
|
|
39
40
|
PLATFORM_INFO: "native:platform-info",
|
|
40
41
|
WALLET_OPENED: "native:wallet-opened",
|
|
@@ -42,5 +43,6 @@ exports.MessageTypes = {
|
|
|
42
43
|
NAVIGATE_BACK: "native:navigate-back",
|
|
43
44
|
CARD_DETAILS_SESSION: "native:card-details-session",
|
|
44
45
|
BIOMETRIC_FAILED: "native:biometric-failed",
|
|
46
|
+
CLIPBOARD_RESULT: "native:clipboard-result",
|
|
45
47
|
};
|
|
46
48
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAgNH;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,GAAG,EAAE;QACH,OAAO,EAAE,YAAY,EAAE,yBAAyB;QAChD,QAAQ,EAAE,0BAA0B;KACrC;IACD,OAAO,EAAE;QACP,SAAS,EAAE,yCAAyC;QACpD,QAAQ,EAAE,2BAA2B;KACtC;CACO,CAAC;AAEX;;;;;;GAMG;AACU,QAAA,YAAY,GAAG;IAC1B,kBAAkB;IAClB,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,qBAAqB;IACnC,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,qBAAqB,EAAE,8BAA8B;IACrD,aAAa,EAAE,sBAAsB;IACrC,4BAA4B,EAAE,qCAAqC;IACnE,iBAAiB,EAAE,0BAA0B;IAC7C,kBAAkB;IAClB,aAAa,EAAE,sBAAsB;IACrC,aAAa,EAAE,sBAAsB;IACrC,YAAY,EAAE,qBAAqB;IACnC,aAAa,EAAE,sBAAsB;IACrC,oBAAoB,EAAE,6BAA6B;IACnD,gBAAgB,EAAE,yBAAyB;IAC3C,gBAAgB,EAAE,yBAAyB;CACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oobit/react-native-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "React Native SDK for integrating Oobit crypto payments into wallet apps",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"url": "git+https://github.com/oobit-tech/react-native-SDK.git"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
+
"expo-clipboard": ">=5.0.0",
|
|
42
43
|
"expo-intent-launcher": ">=6.0.0",
|
|
43
44
|
"expo-linking": ">=6.0.0",
|
|
44
45
|
"expo-local-authentication": ">=14.0.0",
|
|
@@ -55,6 +56,7 @@
|
|
|
55
56
|
"@typescript-eslint/eslint-plugin": "^8.47.0",
|
|
56
57
|
"@typescript-eslint/parser": "^8.47.0",
|
|
57
58
|
"eslint": "^9.39.1",
|
|
59
|
+
"expo-clipboard": "~8.0.8",
|
|
58
60
|
"expo-intent-launcher": "~13.0.7",
|
|
59
61
|
"expo-linking": "~8.0.8",
|
|
60
62
|
"expo-local-authentication": "~15.0.2",
|
package/src/WidgetSDK.tsx
CHANGED
|
@@ -20,16 +20,10 @@ import {
|
|
|
20
20
|
View,
|
|
21
21
|
} from "react-native";
|
|
22
22
|
import { WebView, WebViewMessageEvent } from "react-native-webview";
|
|
23
|
-
import { authenticateWithBiometrics } from "./biometricUtils";
|
|
24
23
|
import { getWidgetUrl } from "./config";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
NativeBiometricFailedMessage,
|
|
28
|
-
NativeCardDetailsSessionMessage,
|
|
29
|
-
WidgetMessage,
|
|
30
|
-
WidgetSDKConfig,
|
|
31
|
-
} from "./types";
|
|
24
|
+
import { CopyToClipboardMessage, WidgetMessage, WidgetSDKConfig } from "./types";
|
|
32
25
|
import { isWalletAvailable, openNativeWallet } from "./walletUtils";
|
|
26
|
+
import * as Clipboard from "expo-clipboard";
|
|
33
27
|
|
|
34
28
|
export interface WidgetSDKRef {
|
|
35
29
|
navigateBack: () => void;
|
|
@@ -131,8 +125,8 @@ export const WidgetSDK = forwardRef<WidgetSDKRef, WidgetSDKConfig>(
|
|
|
131
125
|
onError?.("TOKEN_EXPIRED", "Access token has expired");
|
|
132
126
|
break;
|
|
133
127
|
|
|
134
|
-
case "widget:
|
|
135
|
-
|
|
128
|
+
case "widget:copy-to-clipboard":
|
|
129
|
+
handleCopyToClipboard(message as CopyToClipboardMessage);
|
|
136
130
|
break;
|
|
137
131
|
|
|
138
132
|
default:
|
|
@@ -214,79 +208,30 @@ export const WidgetSDK = forwardRef<WidgetSDKRef, WidgetSDKConfig>(
|
|
|
214
208
|
};
|
|
215
209
|
|
|
216
210
|
/**
|
|
217
|
-
* Handle
|
|
218
|
-
*
|
|
219
|
-
* 2. Generate cryptographically linked sessionId + secretKey pair
|
|
220
|
-
* 3. Send credentials back to widget for API call and decryption
|
|
211
|
+
* Handle clipboard copy request from widget
|
|
212
|
+
* Copies text to device clipboard and sends result back to widget
|
|
221
213
|
*/
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
console.log(
|
|
227
|
-
"[WidgetSDK] Card details requested, initiating biometric auth..."
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
// Step 1: Authenticate with biometrics
|
|
231
|
-
const biometricResult = await authenticateWithBiometrics(
|
|
232
|
-
"Authenticate to view card details"
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
if (!biometricResult.success) {
|
|
236
|
-
console.log(
|
|
237
|
-
"[WidgetSDK] Biometric auth failed:",
|
|
238
|
-
biometricResult.error
|
|
239
|
-
);
|
|
214
|
+
const handleCopyToClipboard = async (message: CopyToClipboardMessage) => {
|
|
215
|
+
const { text, label } = message.payload;
|
|
216
|
+
// Log only the label, never the actual text content (security)
|
|
217
|
+
console.log("[WidgetSDK] Copy to clipboard requested:", label || "unlabeled");
|
|
240
218
|
|
|
241
|
-
const failedMessage: NativeBiometricFailedMessage = {
|
|
242
|
-
type: "native:biometric-failed",
|
|
243
|
-
payload: {
|
|
244
|
-
reason: biometricResult.error?.reason || "failed",
|
|
245
|
-
message: biometricResult.error?.message,
|
|
246
|
-
},
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
sendMessageToWidget(failedMessage);
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Step 2: Generate session credentials
|
|
254
219
|
try {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
publicKey
|
|
261
|
-
);
|
|
262
|
-
|
|
263
|
-
console.log("[WidgetSDK] Session credentials generated successfully");
|
|
264
|
-
|
|
265
|
-
// Step 3: Send credentials to widget
|
|
266
|
-
const sessionMessage: NativeCardDetailsSessionMessage = {
|
|
267
|
-
type: "native:card-details-session",
|
|
268
|
-
payload: {
|
|
269
|
-
sessionId,
|
|
270
|
-
secretKey: secretKeyHex,
|
|
271
|
-
},
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
sendMessageToWidget(sessionMessage);
|
|
220
|
+
await Clipboard.setStringAsync(text);
|
|
221
|
+
sendMessageToWidget({
|
|
222
|
+
type: "native:clipboard-result",
|
|
223
|
+
payload: { success: true, label },
|
|
224
|
+
});
|
|
275
225
|
} catch (error) {
|
|
276
|
-
console.error(
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
);
|
|
280
|
-
|
|
281
|
-
const failedMessage: NativeBiometricFailedMessage = {
|
|
282
|
-
type: "native:biometric-failed",
|
|
226
|
+
console.error("[WidgetSDK] Clipboard copy failed:", error);
|
|
227
|
+
sendMessageToWidget({
|
|
228
|
+
type: "native:clipboard-result",
|
|
283
229
|
payload: {
|
|
284
|
-
|
|
285
|
-
|
|
230
|
+
success: false,
|
|
231
|
+
label,
|
|
232
|
+
error: "Clipboard operation failed",
|
|
286
233
|
},
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
sendMessageToWidget(failedMessage);
|
|
234
|
+
});
|
|
290
235
|
}
|
|
291
236
|
};
|
|
292
237
|
|
package/src/types.ts
CHANGED
|
@@ -22,7 +22,8 @@ export type WidgetMessageType =
|
|
|
22
22
|
| "widget:close"
|
|
23
23
|
| "widget:transaction-requested"
|
|
24
24
|
| "widget:token-expired"
|
|
25
|
-
| "widget:request-card-details-session"
|
|
25
|
+
| "widget:request-card-details-session"
|
|
26
|
+
| "widget:copy-to-clipboard";
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Native Message Types
|
|
@@ -34,7 +35,8 @@ export type NativeMessageType =
|
|
|
34
35
|
| "native:back-pressed"
|
|
35
36
|
| "native:navigate-back"
|
|
36
37
|
| "native:card-details-session"
|
|
37
|
-
| "native:biometric-failed"
|
|
38
|
+
| "native:biometric-failed"
|
|
39
|
+
| "native:clipboard-result";
|
|
38
40
|
|
|
39
41
|
export interface NativeBackPressedMessage {
|
|
40
42
|
type: "native:back-pressed";
|
|
@@ -77,13 +79,23 @@ export interface NativeBiometricFailedMessage {
|
|
|
77
79
|
};
|
|
78
80
|
}
|
|
79
81
|
|
|
82
|
+
export interface NativeClipboardResultMessage {
|
|
83
|
+
type: "native:clipboard-result";
|
|
84
|
+
payload: {
|
|
85
|
+
success: boolean;
|
|
86
|
+
label?: string; // Echo back the label for correlation
|
|
87
|
+
error?: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
80
91
|
export type NativeMessage =
|
|
81
92
|
| NativeBackPressedMessage
|
|
82
93
|
| NativeNavigateBackMessage
|
|
83
94
|
| NativePlatformInfoMessage
|
|
84
95
|
| NativeWalletOpenedMessage
|
|
85
96
|
| NativeCardDetailsSessionMessage
|
|
86
|
-
| NativeBiometricFailedMessage
|
|
97
|
+
| NativeBiometricFailedMessage
|
|
98
|
+
| NativeClipboardResultMessage;
|
|
87
99
|
|
|
88
100
|
export interface BaseWidgetMessage {
|
|
89
101
|
type: WidgetMessageType;
|
|
@@ -146,6 +158,14 @@ export interface RequestCardDetailsSessionMessage extends BaseWidgetMessage {
|
|
|
146
158
|
};
|
|
147
159
|
}
|
|
148
160
|
|
|
161
|
+
export interface CopyToClipboardMessage extends BaseWidgetMessage {
|
|
162
|
+
type: "widget:copy-to-clipboard";
|
|
163
|
+
payload: {
|
|
164
|
+
text: string;
|
|
165
|
+
label?: string; // Optional: human-readable label for analytics/logging (e.g., "Card Number", "Deposit Address")
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
149
169
|
export type WidgetMessage =
|
|
150
170
|
| WidgetReadyMessage
|
|
151
171
|
| OpenWalletMessage
|
|
@@ -154,7 +174,8 @@ export type WidgetMessage =
|
|
|
154
174
|
| WidgetCloseMessage
|
|
155
175
|
| TransactionRequestedMessage
|
|
156
176
|
| TokenExpiredMessage
|
|
157
|
-
| RequestCardDetailsSessionMessage
|
|
177
|
+
| RequestCardDetailsSessionMessage
|
|
178
|
+
| CopyToClipboardMessage;
|
|
158
179
|
|
|
159
180
|
/**
|
|
160
181
|
* Widget environment configuration
|
|
@@ -219,6 +240,7 @@ export const MessageTypes = {
|
|
|
219
240
|
TRANSACTION_REQUESTED: "widget:transaction-requested",
|
|
220
241
|
TOKEN_EXPIRED: "widget:token-expired",
|
|
221
242
|
REQUEST_CARD_DETAILS_SESSION: "widget:request-card-details-session",
|
|
243
|
+
COPY_TO_CLIPBOARD: "widget:copy-to-clipboard",
|
|
222
244
|
// Native → Widget
|
|
223
245
|
PLATFORM_INFO: "native:platform-info",
|
|
224
246
|
WALLET_OPENED: "native:wallet-opened",
|
|
@@ -226,4 +248,5 @@ export const MessageTypes = {
|
|
|
226
248
|
NAVIGATE_BACK: "native:navigate-back",
|
|
227
249
|
CARD_DETAILS_SESSION: "native:card-details-session",
|
|
228
250
|
BIOMETRIC_FAILED: "native:biometric-failed",
|
|
251
|
+
CLIPBOARD_RESULT: "native:clipboard-result",
|
|
229
252
|
} as const;
|