@oobit/react-native-sdk 3.0.1 → 3.1.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/dist/index.d.mts +11 -0
- package/dist/index.d.ts +11 -4
- package/dist/index.js +243 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +238 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +20 -10
- package/src/{WidgetSDK.tsx → components/WidgetSDK.tsx} +10 -9
- package/src/index.ts +5 -5
- package/src/utils/walletUtils.ts +94 -0
- package/dist/WidgetSDK.d.ts +0 -12
- package/dist/WidgetSDK.d.ts.map +0 -1
- package/dist/WidgetSDK.js +0 -143
- package/dist/WidgetSDK.js.map +0 -1
- package/dist/config.d.ts +0 -24
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -53
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/types.d.ts +0 -73
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -17
- package/dist/types.js.map +0 -1
- package/dist/walletUtils.d.ts +0 -14
- package/dist/walletUtils.d.ts.map +0 -1
- package/dist/walletUtils.js +0 -144
- package/dist/walletUtils.js.map +0 -1
- package/src/config.ts +0 -51
- package/src/types.ts +0 -76
- package/src/walletUtils.ts +0 -155
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Widget SDK Component
|
|
3
|
-
* Embeds the web widget in a WebView and handles bidirectional communication
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import React, {
|
|
7
2
|
forwardRef,
|
|
8
3
|
useEffect,
|
|
@@ -20,9 +15,9 @@ import {
|
|
|
20
15
|
View,
|
|
21
16
|
} from "react-native";
|
|
22
17
|
import { WebView, WebViewMessageEvent } from "react-native-webview";
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import { isWalletAvailable, openNativeWallet } from "
|
|
18
|
+
import type { WidgetMessage, WidgetSDKConfig } from "@oobit/core";
|
|
19
|
+
import { getWidgetUrl, stripTokenPrefix } from "@oobit/core";
|
|
20
|
+
import { isWalletAvailable, openNativeWallet } from "../utils/walletUtils";
|
|
26
21
|
|
|
27
22
|
export interface WidgetSDKRef {
|
|
28
23
|
navigateBack: () => void;
|
|
@@ -93,7 +88,7 @@ export const WidgetSDK = forwardRef<WidgetSDKRef, WidgetSDKConfig>(
|
|
|
93
88
|
break;
|
|
94
89
|
}
|
|
95
90
|
} catch {
|
|
96
|
-
//
|
|
91
|
+
// Invalid JSON from WebView - ignore
|
|
97
92
|
}
|
|
98
93
|
};
|
|
99
94
|
|
|
@@ -109,6 +104,7 @@ export const WidgetSDK = forwardRef<WidgetSDKRef, WidgetSDKConfig>(
|
|
|
109
104
|
token: stripTokenPrefix(accessToken),
|
|
110
105
|
platform: Platform.OS,
|
|
111
106
|
userWalletAddress,
|
|
107
|
+
sdk: 'react-native',
|
|
112
108
|
});
|
|
113
109
|
return `${baseUrl}?${params.toString()}`;
|
|
114
110
|
}, [accessToken, userWalletAddress]);
|
|
@@ -139,6 +135,11 @@ export const WidgetSDK = forwardRef<WidgetSDKRef, WidgetSDKConfig>(
|
|
|
139
135
|
}
|
|
140
136
|
return true;
|
|
141
137
|
}}
|
|
138
|
+
onOpenWindow={(syntheticEvent) => {
|
|
139
|
+
const { nativeEvent } = syntheticEvent;
|
|
140
|
+
const { targetUrl } = nativeEvent;
|
|
141
|
+
Linking.openURL(targetUrl).catch(() => {});
|
|
142
|
+
}}
|
|
142
143
|
javaScriptEnabled={true}
|
|
143
144
|
domStorageEnabled={true}
|
|
144
145
|
allowsInlineMediaPlayback={true}
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
export { WidgetSDK } from './components/WidgetSDK';
|
|
2
|
+
export type { WidgetSDKRef } from './components/WidgetSDK';
|
|
3
|
+
|
|
1
4
|
export type {
|
|
2
|
-
|
|
5
|
+
TransactionRequest,
|
|
3
6
|
EvmTransactionRequest,
|
|
4
7
|
SolanaTransactionRequest,
|
|
5
|
-
TransactionRequest,
|
|
6
8
|
TransactionTokenMetadata,
|
|
7
9
|
WidgetSDKConfig,
|
|
8
|
-
} from
|
|
9
|
-
export { WidgetSDK } from "./WidgetSDK";
|
|
10
|
-
export type { WidgetSDKRef } from "./WidgetSDK";
|
|
10
|
+
} from '@oobit/core';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Alert, Linking, Platform } from "react-native";
|
|
2
|
+
import { WALLET_URLS } from "@oobit/core";
|
|
3
|
+
|
|
4
|
+
const GOOGLE_WALLET_PACKAGE = "com.google.android.apps.walletnfcrel";
|
|
5
|
+
|
|
6
|
+
export async function openNativeWallet(): Promise<boolean> {
|
|
7
|
+
try {
|
|
8
|
+
if (Platform.OS === "ios") {
|
|
9
|
+
return await openAppleWallet();
|
|
10
|
+
}
|
|
11
|
+
if (Platform.OS === "android") {
|
|
12
|
+
return await openGoogleWallet();
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
} catch {
|
|
16
|
+
Alert.alert(
|
|
17
|
+
"Error",
|
|
18
|
+
"Could not open wallet. Please check if the app is installed."
|
|
19
|
+
);
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function openAppleWallet(): Promise<boolean> {
|
|
25
|
+
const { passkit, fallback } = WALLET_URLS.ios;
|
|
26
|
+
|
|
27
|
+
// Try wallet:// scheme first (documented for recent iOS)
|
|
28
|
+
if (await tryOpenUrl("wallet://")) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Try shoebox:// scheme (unofficial but widely used)
|
|
33
|
+
if (await tryOpenUrl(passkit)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Fallback to wallet.apple.com (opens in browser)
|
|
38
|
+
if (await tryOpenUrl(fallback)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
throw new Error("Apple Wallet not available");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function openGoogleWallet(): Promise<boolean> {
|
|
46
|
+
const launchUrl = `market://launch?id=${GOOGLE_WALLET_PACKAGE}`;
|
|
47
|
+
|
|
48
|
+
// Try launching the app directly
|
|
49
|
+
if (await tryOpenUrl(launchUrl)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// App not installed - open Play Store
|
|
54
|
+
const playStoreUrl = `market://details?id=${GOOGLE_WALLET_PACKAGE}`;
|
|
55
|
+
const webPlayStoreUrl = `https://play.google.com/store/apps/details?id=${GOOGLE_WALLET_PACKAGE}`;
|
|
56
|
+
|
|
57
|
+
const opened = await tryOpenUrl(playStoreUrl) || await tryOpenUrl(webPlayStoreUrl);
|
|
58
|
+
|
|
59
|
+
if (opened) {
|
|
60
|
+
Alert.alert(
|
|
61
|
+
"Google Wallet",
|
|
62
|
+
"Google Wallet is not installed. Opening Play Store to install the app."
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function tryOpenUrl(url: string): Promise<boolean> {
|
|
70
|
+
try {
|
|
71
|
+
const canOpen = await Linking.canOpenURL(url);
|
|
72
|
+
if (canOpen) {
|
|
73
|
+
await Linking.openURL(url);
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
} catch {
|
|
77
|
+
// URL scheme not available
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export async function isWalletAvailable(): Promise<boolean> {
|
|
83
|
+
try {
|
|
84
|
+
if (Platform.OS === "ios") {
|
|
85
|
+
return await Linking.canOpenURL(WALLET_URLS.ios.passkit);
|
|
86
|
+
}
|
|
87
|
+
if (Platform.OS === "android") {
|
|
88
|
+
return await Linking.canOpenURL(WALLET_URLS.android.googlePay);
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
} catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
package/dist/WidgetSDK.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Widget SDK Component
|
|
3
|
-
* Embeds the web widget in a WebView and handles bidirectional communication
|
|
4
|
-
*/
|
|
5
|
-
import React from "react";
|
|
6
|
-
import { WidgetSDKConfig } from "./types";
|
|
7
|
-
export interface WidgetSDKRef {
|
|
8
|
-
navigateBack: () => void;
|
|
9
|
-
reload: () => void;
|
|
10
|
-
}
|
|
11
|
-
export declare const WidgetSDK: React.ForwardRefExoticComponent<WidgetSDKConfig & React.RefAttributes<WidgetSDKRef>>;
|
|
12
|
-
//# sourceMappingURL=WidgetSDK.d.ts.map
|
package/dist/WidgetSDK.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetSDK.d.ts","sourceRoot":"","sources":["../src/WidgetSDK.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAWf,OAAO,EAAiB,eAAe,EAAE,MAAM,SAAS,CAAC;AAGzD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,sFA6HrB,CAAC"}
|
package/dist/WidgetSDK.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Widget SDK Component
|
|
4
|
-
* Embeds the web widget in a WebView and handles bidirectional communication
|
|
5
|
-
*/
|
|
6
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
-
if (k2 === undefined) k2 = k;
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
-
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
-
var ownKeys = function(o) {
|
|
24
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
-
var ar = [];
|
|
26
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
|
-
return ownKeys(o);
|
|
30
|
-
};
|
|
31
|
-
return function (mod) {
|
|
32
|
-
if (mod && mod.__esModule) return mod;
|
|
33
|
-
var result = {};
|
|
34
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
-
__setModuleDefault(result, mod);
|
|
36
|
-
return result;
|
|
37
|
-
};
|
|
38
|
-
})();
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.WidgetSDK = void 0;
|
|
41
|
-
const react_1 = __importStar(require("react"));
|
|
42
|
-
const react_native_1 = require("react-native");
|
|
43
|
-
const react_native_webview_1 = require("react-native-webview");
|
|
44
|
-
const config_1 = require("./config");
|
|
45
|
-
const walletUtils_1 = require("./walletUtils");
|
|
46
|
-
exports.WidgetSDK = (0, react_1.forwardRef)(({ accessToken, userWalletAddress, onClose, onTransactionRequested }, ref) => {
|
|
47
|
-
const webViewRef = (0, react_1.useRef)(null);
|
|
48
|
-
const [walletAvailable, setWalletAvailable] = (0, react_1.useState)(false);
|
|
49
|
-
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
|
|
50
|
-
const hasLoadedOnce = (0, react_1.useRef)(false);
|
|
51
|
-
(0, react_1.useEffect)(() => {
|
|
52
|
-
(0, walletUtils_1.isWalletAvailable)().then(setWalletAvailable);
|
|
53
|
-
}, []);
|
|
54
|
-
(0, react_1.useEffect)(() => {
|
|
55
|
-
const backHandler = react_native_1.BackHandler.addEventListener("hardwareBackPress", () => {
|
|
56
|
-
sendMessageToWidget({ type: "native:back-pressed" });
|
|
57
|
-
return true;
|
|
58
|
-
});
|
|
59
|
-
return () => backHandler.remove();
|
|
60
|
-
}, []);
|
|
61
|
-
(0, react_1.useImperativeHandle)(ref, () => ({
|
|
62
|
-
navigateBack: () => sendMessageToWidget({ type: "native:navigate-back" }),
|
|
63
|
-
reload: () => {
|
|
64
|
-
setIsLoading(true);
|
|
65
|
-
hasLoadedOnce.current = false;
|
|
66
|
-
webViewRef.current?.reload();
|
|
67
|
-
},
|
|
68
|
-
}));
|
|
69
|
-
const handleMessage = (event) => {
|
|
70
|
-
try {
|
|
71
|
-
const message = JSON.parse(event.nativeEvent.data);
|
|
72
|
-
switch (message.type) {
|
|
73
|
-
case "widget:ready":
|
|
74
|
-
sendMessageToWidget({
|
|
75
|
-
type: "native:platform-info",
|
|
76
|
-
payload: { platform: react_native_1.Platform.OS, walletAvailable },
|
|
77
|
-
});
|
|
78
|
-
break;
|
|
79
|
-
case "widget:open-wallet":
|
|
80
|
-
(0, walletUtils_1.openNativeWallet)().then((success) => {
|
|
81
|
-
sendMessageToWidget({
|
|
82
|
-
type: "native:wallet-opened",
|
|
83
|
-
payload: { success },
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
break;
|
|
87
|
-
case "widget:close":
|
|
88
|
-
onClose?.();
|
|
89
|
-
break;
|
|
90
|
-
case "widget:transaction-requested":
|
|
91
|
-
onTransactionRequested(message.payload);
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
// Ignore parse errors
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
const sendMessageToWidget = (message) => {
|
|
100
|
-
webViewRef.current?.injectJavaScript(`window.postMessage(${JSON.stringify(message)}, '*'); true;`);
|
|
101
|
-
};
|
|
102
|
-
const finalWidgetUrl = (0, react_1.useMemo)(() => {
|
|
103
|
-
const baseUrl = (0, config_1.getWidgetUrl)(accessToken);
|
|
104
|
-
const params = new URLSearchParams({
|
|
105
|
-
token: (0, config_1.stripTokenPrefix)(accessToken),
|
|
106
|
-
platform: react_native_1.Platform.OS,
|
|
107
|
-
userWalletAddress,
|
|
108
|
-
});
|
|
109
|
-
return `${baseUrl}?${params.toString()}`;
|
|
110
|
-
}, [accessToken, userWalletAddress]);
|
|
111
|
-
return (<react_native_1.View style={styles.container}>
|
|
112
|
-
<react_native_webview_1.WebView ref={webViewRef} style={styles.webview} source={{ uri: finalWidgetUrl }} onMessage={handleMessage} onLoadEnd={() => {
|
|
113
|
-
if (!hasLoadedOnce.current) {
|
|
114
|
-
hasLoadedOnce.current = true;
|
|
115
|
-
setIsLoading(false);
|
|
116
|
-
}
|
|
117
|
-
}} onShouldStartLoadWithRequest={(request) => {
|
|
118
|
-
const { url } = request;
|
|
119
|
-
if (url.startsWith("shoebox://") ||
|
|
120
|
-
url.includes("pay.google.com") ||
|
|
121
|
-
url.includes("wallet.google.com") ||
|
|
122
|
-
url.includes("wallet.apple.com")) {
|
|
123
|
-
react_native_1.Linking.openURL(url).catch(() => { });
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
return true;
|
|
127
|
-
}} javaScriptEnabled={true} domStorageEnabled={true} allowsInlineMediaPlayback={true} bounces={false} allowsBackForwardNavigationGestures={true} mixedContentMode="always"/>
|
|
128
|
-
{isLoading && (<react_native_1.View style={styles.loadingOverlay}>
|
|
129
|
-
<react_native_1.ActivityIndicator size="large" color="#007AFF"/>
|
|
130
|
-
</react_native_1.View>)}
|
|
131
|
-
</react_native_1.View>);
|
|
132
|
-
});
|
|
133
|
-
const styles = react_native_1.StyleSheet.create({
|
|
134
|
-
container: { flex: 1 },
|
|
135
|
-
webview: { flex: 1 },
|
|
136
|
-
loadingOverlay: {
|
|
137
|
-
...react_native_1.StyleSheet.absoluteFillObject,
|
|
138
|
-
backgroundColor: "rgba(255, 255, 255, 0.9)",
|
|
139
|
-
justifyContent: "center",
|
|
140
|
-
alignItems: "center",
|
|
141
|
-
},
|
|
142
|
-
});
|
|
143
|
-
//# sourceMappingURL=WidgetSDK.js.map
|
package/dist/WidgetSDK.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetSDK.js","sourceRoot":"","sources":["../src/WidgetSDK.tsx"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Widget SDK Configuration
|
|
3
|
-
* Environment detection based on access token prefix
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Widget URLs by environment
|
|
7
|
-
*/
|
|
8
|
-
export declare const WIDGET_URLS: {
|
|
9
|
-
readonly sandbox: "https://oobit-widget-dev.web.app";
|
|
10
|
-
readonly production: "https://oobit-widget.web.app";
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Get the widget URL based on the access token prefix
|
|
14
|
-
* @param accessToken - The access token (prefixed with sbx_ or prod_)
|
|
15
|
-
* @returns The widget URL for the corresponding environment
|
|
16
|
-
*/
|
|
17
|
-
export declare function getWidgetUrl(accessToken: string): string;
|
|
18
|
-
/**
|
|
19
|
-
* Strip the environment prefix from an access token
|
|
20
|
-
* @param accessToken - The access token (prefixed with sbx_ or prod_)
|
|
21
|
-
* @returns The token without the environment prefix
|
|
22
|
-
*/
|
|
23
|
-
export declare function stripTokenPrefix(accessToken: string): string;
|
|
24
|
-
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ5D"}
|
package/dist/config.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Widget SDK Configuration
|
|
4
|
-
* Environment detection based on access token prefix
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.WIDGET_URLS = void 0;
|
|
8
|
-
exports.getWidgetUrl = getWidgetUrl;
|
|
9
|
-
exports.stripTokenPrefix = stripTokenPrefix;
|
|
10
|
-
/**
|
|
11
|
-
* Token prefixes that determine the environment
|
|
12
|
-
*/
|
|
13
|
-
const TOKEN_PREFIX = {
|
|
14
|
-
SANDBOX: "sbx_",
|
|
15
|
-
PRODUCTION: "prod_",
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Widget URLs by environment
|
|
19
|
-
*/
|
|
20
|
-
exports.WIDGET_URLS = {
|
|
21
|
-
sandbox: "https://oobit-widget-dev.web.app",
|
|
22
|
-
production: "https://oobit-widget.web.app",
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Get the widget URL based on the access token prefix
|
|
26
|
-
* @param accessToken - The access token (prefixed with sbx_ or prod_)
|
|
27
|
-
* @returns The widget URL for the corresponding environment
|
|
28
|
-
*/
|
|
29
|
-
function getWidgetUrl(accessToken) {
|
|
30
|
-
if (accessToken.startsWith(TOKEN_PREFIX.SANDBOX)) {
|
|
31
|
-
return exports.WIDGET_URLS.sandbox;
|
|
32
|
-
}
|
|
33
|
-
if (accessToken.startsWith(TOKEN_PREFIX.PRODUCTION)) {
|
|
34
|
-
return exports.WIDGET_URLS.production;
|
|
35
|
-
}
|
|
36
|
-
// Default to production for backwards compatibility
|
|
37
|
-
return exports.WIDGET_URLS.production;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Strip the environment prefix from an access token
|
|
41
|
-
* @param accessToken - The access token (prefixed with sbx_ or prod_)
|
|
42
|
-
* @returns The token without the environment prefix
|
|
43
|
-
*/
|
|
44
|
-
function stripTokenPrefix(accessToken) {
|
|
45
|
-
if (accessToken.startsWith(TOKEN_PREFIX.SANDBOX)) {
|
|
46
|
-
return accessToken.slice(TOKEN_PREFIX.SANDBOX.length);
|
|
47
|
-
}
|
|
48
|
-
if (accessToken.startsWith(TOKEN_PREFIX.PRODUCTION)) {
|
|
49
|
-
return accessToken.slice(TOKEN_PREFIX.PRODUCTION.length);
|
|
50
|
-
}
|
|
51
|
-
return accessToken;
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAuBH,oCASC;AAOD,4CAQC;AA7CD;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,OAAO;CACX,CAAC;AAEX;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,kCAAkC;IAC3C,UAAU,EAAE,8BAA8B;CAClC,CAAC;AAEX;;;;GAIG;AACH,SAAgB,YAAY,CAAC,WAAmB;IAC9C,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,mBAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,OAAO,mBAAW,CAAC,UAAU,CAAC;IAChC,CAAC;IACD,oDAAoD;IACpD,OAAO,mBAAW,CAAC,UAAU,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,OAAO,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token metadata included with transaction requests
|
|
3
|
-
*/
|
|
4
|
-
export interface TransactionTokenMetadata {
|
|
5
|
-
symbol: string;
|
|
6
|
-
amount: string;
|
|
7
|
-
decimals: number;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* EVM transaction data
|
|
11
|
-
*/
|
|
12
|
-
export interface EvmTransactionData {
|
|
13
|
-
to: string;
|
|
14
|
-
data: string;
|
|
15
|
-
value: string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* EVM transaction request payload
|
|
19
|
-
*/
|
|
20
|
-
export interface EvmTransactionRequest {
|
|
21
|
-
type: "evm";
|
|
22
|
-
chainId: number;
|
|
23
|
-
transaction: EvmTransactionData;
|
|
24
|
-
tokenMetadata: TransactionTokenMetadata;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Solana transaction request payload
|
|
28
|
-
*/
|
|
29
|
-
export interface SolanaTransactionRequest {
|
|
30
|
-
type: "solana";
|
|
31
|
-
transaction: string;
|
|
32
|
-
tokenMetadata: TransactionTokenMetadata;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Transaction request payload
|
|
36
|
-
*/
|
|
37
|
-
export type TransactionRequest = EvmTransactionRequest | SolanaTransactionRequest;
|
|
38
|
-
/**
|
|
39
|
-
* SDK Configuration
|
|
40
|
-
*/
|
|
41
|
-
export interface WidgetSDKConfig {
|
|
42
|
-
accessToken: string;
|
|
43
|
-
userWalletAddress: string;
|
|
44
|
-
onClose?: () => void;
|
|
45
|
-
onTransactionRequested: (transaction: TransactionRequest) => void;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Internal: Messages from widget
|
|
49
|
-
*/
|
|
50
|
-
export type WidgetMessage = {
|
|
51
|
-
type: "widget:ready";
|
|
52
|
-
} | {
|
|
53
|
-
type: "widget:open-wallet";
|
|
54
|
-
} | {
|
|
55
|
-
type: "widget:close";
|
|
56
|
-
} | {
|
|
57
|
-
type: "widget:transaction-requested";
|
|
58
|
-
payload: TransactionRequest;
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* Internal: Wallet URLs
|
|
62
|
-
*/
|
|
63
|
-
export declare const WALLET_URLS: {
|
|
64
|
-
readonly ios: {
|
|
65
|
-
readonly passkit: "shoebox://";
|
|
66
|
-
readonly fallback: "https://wallet.apple.com";
|
|
67
|
-
};
|
|
68
|
-
readonly android: {
|
|
69
|
-
readonly googlePay: "https://pay.google.com/gp/w/home/wallet";
|
|
70
|
-
readonly fallback: "https://wallet.google.com";
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,kBAAkB,CAAC;IAChC,aAAa,EAAE,wBAAwB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,wBAAwB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,qBAAqB,GACrB,wBAAwB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,sBAAsB,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACnE;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC"}
|
package/dist/types.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WALLET_URLS = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Internal: Wallet URLs
|
|
6
|
-
*/
|
|
7
|
-
exports.WALLET_URLS = {
|
|
8
|
-
ios: {
|
|
9
|
-
passkit: "shoebox://",
|
|
10
|
-
fallback: "https://wallet.apple.com",
|
|
11
|
-
},
|
|
12
|
-
android: {
|
|
13
|
-
googlePay: "https://pay.google.com/gp/w/home/wallet",
|
|
14
|
-
fallback: "https://wallet.google.com",
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA+DA;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,GAAG,EAAE;QACH,OAAO,EAAE,YAAY;QACrB,QAAQ,EAAE,0BAA0B;KACrC;IACD,OAAO,EAAE;QACP,SAAS,EAAE,yCAAyC;QACpD,QAAQ,EAAE,2BAA2B;KACtC;CACO,CAAC"}
|
package/dist/walletUtils.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wallet Integration Utilities
|
|
3
|
-
* Handles opening Apple Wallet (iOS) and Google Wallet (Android)
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Opens the native wallet app based on platform
|
|
7
|
-
* @returns Promise that resolves when wallet opens successfully
|
|
8
|
-
*/
|
|
9
|
-
export declare const openNativeWallet: () => Promise<boolean>;
|
|
10
|
-
/**
|
|
11
|
-
* Check if wallet is available on the current platform
|
|
12
|
-
*/
|
|
13
|
-
export declare const isWalletAvailable: () => Promise<boolean>;
|
|
14
|
-
//# sourceMappingURL=walletUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"walletUtils.d.ts","sourceRoot":"","sources":["../src/walletUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,OAAO,CAkBxD,CAAC;AA6GF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,OAAO,CAYzD,CAAC"}
|