@formo/analytics 1.25.0 → 1.27.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/LICENSE +21 -0
- package/README.md +6 -4
- package/dist/cjs/src/FormoAnalytics.d.ts +27 -15
- package/dist/cjs/src/FormoAnalytics.js +198 -257
- package/dist/cjs/src/FormoAnalyticsProvider.js +71 -13
- package/dist/{esm/src/lib/consent.d.ts → cjs/src/consent/index.d.ts} +1 -1
- package/dist/cjs/src/{lib/consent.js → consent/index.js} +1 -1
- package/dist/cjs/src/constants/base.d.ts +0 -2
- package/dist/cjs/src/constants/base.js +3 -3
- package/dist/cjs/src/constants/config.js +1 -1
- package/dist/cjs/src/{lib/event → event}/EventFactory.d.ts +2 -2
- package/dist/cjs/src/{lib/event → event}/EventFactory.js +9 -9
- package/dist/cjs/src/{lib/event → event}/EventManager.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/EventManager.js +1 -1
- package/dist/cjs/src/{lib/event → event}/type.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/utils.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/utils.js +1 -1
- package/dist/cjs/src/fetch/index.d.ts +11 -0
- package/dist/cjs/src/fetch/index.js +126 -0
- package/dist/cjs/src/provider/detection.d.ts +58 -0
- package/dist/cjs/src/provider/detection.js +103 -0
- package/dist/cjs/src/provider/index.d.ts +6 -0
- package/dist/cjs/src/provider/index.js +11 -0
- package/dist/cjs/src/queue/EventQueue.d.ts +56 -0
- package/dist/cjs/src/{lib/queue → queue}/EventQueue.js +161 -52
- package/dist/{esm/src/lib → cjs/src}/queue/type.d.ts +1 -1
- package/dist/cjs/src/session/index.d.ts +91 -0
- package/dist/cjs/src/session/index.js +126 -0
- package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
- package/dist/cjs/src/types/base.d.ts +35 -1
- package/dist/cjs/src/types/events.d.ts +5 -3
- package/dist/cjs/src/validators/object.js +0 -2
- package/dist/cjs/src/version.d.ts +1 -1
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +93 -0
- package/dist/cjs/src/wagmi/WagmiEventHandler.js +669 -0
- package/dist/cjs/src/wagmi/index.d.ts +9 -0
- package/dist/cjs/src/wagmi/index.js +12 -0
- package/dist/cjs/src/wagmi/types.d.ts +146 -0
- package/dist/cjs/src/wagmi/types.js +10 -0
- package/dist/cjs/src/wagmi/utils.d.ts +74 -0
- package/dist/cjs/src/wagmi/utils.js +198 -0
- package/dist/esm/src/FormoAnalytics.d.ts +27 -15
- package/dist/esm/src/FormoAnalytics.js +88 -147
- package/dist/esm/src/FormoAnalyticsProvider.js +68 -10
- package/dist/{cjs/src/lib/consent.d.ts → esm/src/consent/index.d.ts} +1 -1
- package/dist/esm/src/{lib/consent.js → consent/index.js} +1 -1
- package/dist/esm/src/constants/base.d.ts +0 -2
- package/dist/esm/src/constants/base.js +2 -2
- package/dist/esm/src/constants/config.js +1 -1
- package/dist/esm/src/{lib/event → event}/EventFactory.d.ts +2 -2
- package/dist/esm/src/{lib/event → event}/EventFactory.js +9 -9
- package/dist/esm/src/{lib/event → event}/EventManager.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/EventManager.js +1 -1
- package/dist/esm/src/{lib/event → event}/type.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/utils.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/utils.js +1 -1
- package/dist/esm/src/fetch/index.d.ts +11 -0
- package/dist/esm/src/fetch/index.js +124 -0
- package/dist/esm/src/provider/detection.d.ts +58 -0
- package/dist/esm/src/provider/detection.js +98 -0
- package/dist/esm/src/provider/index.d.ts +6 -0
- package/dist/esm/src/provider/index.js +5 -0
- package/dist/esm/src/queue/EventQueue.d.ts +56 -0
- package/dist/esm/src/{lib/queue → queue}/EventQueue.js +161 -52
- package/dist/{cjs/src/lib → esm/src}/queue/type.d.ts +1 -1
- package/dist/esm/src/session/index.d.ts +91 -0
- package/dist/esm/src/session/index.js +123 -0
- package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
- package/dist/esm/src/types/base.d.ts +35 -1
- package/dist/esm/src/types/events.d.ts +5 -3
- package/dist/esm/src/validators/object.js +0 -2
- package/dist/esm/src/version.d.ts +1 -1
- package/dist/esm/src/version.js +1 -1
- package/dist/esm/src/wagmi/WagmiEventHandler.d.ts +93 -0
- package/dist/esm/src/wagmi/WagmiEventHandler.js +666 -0
- package/dist/esm/src/wagmi/index.d.ts +9 -0
- package/dist/esm/src/wagmi/index.js +8 -0
- package/dist/esm/src/wagmi/types.d.ts +146 -0
- package/dist/esm/src/wagmi/types.js +9 -0
- package/dist/esm/src/wagmi/utils.d.ts +74 -0
- package/dist/esm/src/wagmi/utils.js +192 -0
- package/dist/index.umd.min.js +1 -1
- package/package.json +23 -4
- package/dist/cjs/src/lib/fetch.d.ts +0 -3
- package/dist/cjs/src/lib/fetch.js +0 -8
- package/dist/cjs/src/lib/index.d.ts +0 -7
- package/dist/cjs/src/lib/index.js +0 -28
- package/dist/cjs/src/lib/queue/EventQueue.d.ts +0 -34
- package/dist/esm/src/lib/fetch.d.ts +0 -3
- package/dist/esm/src/lib/fetch.js +0 -3
- package/dist/esm/src/lib/index.d.ts +0 -7
- package/dist/esm/src/lib/index.js +0 -7
- package/dist/esm/src/lib/queue/EventQueue.d.ts +0 -34
- /package/dist/cjs/src/{lib/browser → browser}/browsers.d.ts +0 -0
- /package/dist/cjs/src/{lib/browser → browser}/browsers.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/constants.d.ts +0 -0
- /package/dist/cjs/src/{lib/event → event}/constants.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/event → event}/index.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/type.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/Logger.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/Logger.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/index.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/type.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/type.js +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/index.js +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/type.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/StorageManager.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/web.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/constant.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/constant.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/index.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/type.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/type.js +0 -0
- /package/dist/esm/src/{lib/browser → browser}/browsers.d.ts +0 -0
- /package/dist/esm/src/{lib/browser → browser}/browsers.js +0 -0
- /package/dist/esm/src/{lib/event → event}/constants.d.ts +0 -0
- /package/dist/esm/src/{lib/event → event}/constants.js +0 -0
- /package/dist/esm/src/{lib/event → event}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/event → event}/index.js +0 -0
- /package/dist/esm/src/{lib/event → event}/type.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/Logger.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/Logger.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/index.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/type.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/type.js +0 -0
- /package/dist/esm/src/{lib/queue → queue}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/queue → queue}/index.js +0 -0
- /package/dist/esm/src/{lib/queue → queue}/type.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/StorageManager.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/memory.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/web.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/constant.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/constant.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/index.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/type.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/type.js +0 -0
|
@@ -51,11 +51,13 @@ exports.useFormo = exports.FormoAnalyticsProvider = exports.FormoAnalyticsContex
|
|
|
51
51
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
52
52
|
var react_1 = require("react");
|
|
53
53
|
var FormoAnalytics_1 = require("./FormoAnalytics");
|
|
54
|
-
var
|
|
54
|
+
var storage_1 = require("./storage");
|
|
55
|
+
var logger_1 = require("./logger");
|
|
55
56
|
var defaultContext = {
|
|
56
57
|
chain: function () { return Promise.resolve(); },
|
|
57
58
|
page: function () { return Promise.resolve(); },
|
|
58
59
|
reset: function () { },
|
|
60
|
+
cleanup: function () { },
|
|
59
61
|
detect: function () { return Promise.resolve(); },
|
|
60
62
|
connect: function () { return Promise.resolve(); },
|
|
61
63
|
disconnect: function () { return Promise.resolve(); },
|
|
@@ -73,11 +75,11 @@ var FormoAnalyticsProvider = function (props) {
|
|
|
73
75
|
var writeKey = props.writeKey, _a = props.disabled, disabled = _a === void 0 ? false : _a, children = props.children;
|
|
74
76
|
// Keep the app running without analytics if no Write Key is provided or disabled
|
|
75
77
|
if (!writeKey) {
|
|
76
|
-
|
|
78
|
+
logger_1.logger.error("FormoAnalyticsProvider: No Write Key provided");
|
|
77
79
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
78
80
|
}
|
|
79
81
|
if (disabled) {
|
|
80
|
-
|
|
82
|
+
logger_1.logger.warn("FormoAnalytics is disabled");
|
|
81
83
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
82
84
|
}
|
|
83
85
|
return (0, jsx_runtime_1.jsx)(InitializedAnalytics, __assign({}, props));
|
|
@@ -86,42 +88,98 @@ exports.FormoAnalyticsProvider = FormoAnalyticsProvider;
|
|
|
86
88
|
var InitializedAnalytics = function (_a) {
|
|
87
89
|
var writeKey = _a.writeKey, options = _a.options, children = _a.children;
|
|
88
90
|
var _b = (0, react_1.useState)(defaultContext), sdk = _b[0], setSdk = _b[1];
|
|
89
|
-
var
|
|
90
|
-
(0,
|
|
91
|
+
var sdkRef = (0, react_1.useRef)(defaultContext);
|
|
92
|
+
(0, storage_1.initStorageManager)(writeKey);
|
|
93
|
+
// Create a stable key from options that ignores complex objects and functions
|
|
94
|
+
// We only care about serializable config values that would affect SDK behavior
|
|
95
|
+
var optionsKey = (0, react_1.useMemo)(function () {
|
|
96
|
+
if (!options)
|
|
97
|
+
return 'undefined';
|
|
98
|
+
// Extract only the serializable parts of options
|
|
99
|
+
var serializableOptions = {
|
|
100
|
+
tracking: options.tracking,
|
|
101
|
+
autocapture: options.autocapture,
|
|
102
|
+
apiHost: options.apiHost,
|
|
103
|
+
flushAt: options.flushAt,
|
|
104
|
+
flushInterval: options.flushInterval,
|
|
105
|
+
retryCount: options.retryCount,
|
|
106
|
+
maxQueueSize: options.maxQueueSize,
|
|
107
|
+
logger: options.logger,
|
|
108
|
+
referral: options.referral,
|
|
109
|
+
// For complex objects, just track their presence, not their content
|
|
110
|
+
hasProvider: !!options.provider,
|
|
111
|
+
hasWagmi: !!options.wagmi,
|
|
112
|
+
hasReady: !!options.ready,
|
|
113
|
+
};
|
|
114
|
+
try {
|
|
115
|
+
return JSON.stringify(serializableOptions);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Fallback to timestamp if serialization fails
|
|
119
|
+
logger_1.logger.warn('Failed to serialize options, using timestamp', error);
|
|
120
|
+
return Date.now().toString();
|
|
121
|
+
}
|
|
122
|
+
}, [options]);
|
|
91
123
|
(0, react_1.useEffect)(function () {
|
|
124
|
+
var isCleanedUp = false;
|
|
92
125
|
var initialize = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
93
126
|
var sdkInstance, error_1;
|
|
94
127
|
return __generator(this, function (_a) {
|
|
95
128
|
switch (_a.label) {
|
|
96
129
|
case 0:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
130
|
+
// Clean up existing SDK instance before creating a new one
|
|
131
|
+
if (sdkRef.current && sdkRef.current !== defaultContext) {
|
|
132
|
+
logger_1.logger.log("Cleaning up existing FormoAnalytics SDK instance before re-initialization");
|
|
133
|
+
sdkRef.current.cleanup();
|
|
134
|
+
sdkRef.current = defaultContext;
|
|
135
|
+
setSdk(defaultContext);
|
|
136
|
+
}
|
|
100
137
|
_a.label = 1;
|
|
101
138
|
case 1:
|
|
102
139
|
_a.trys.push([1, 3, , 4]);
|
|
103
140
|
return [4 /*yield*/, FormoAnalytics_1.FormoAnalytics.init(writeKey, options)];
|
|
104
141
|
case 2:
|
|
105
142
|
sdkInstance = _a.sent();
|
|
106
|
-
|
|
107
|
-
|
|
143
|
+
// Only set SDK if the component hasn't been cleaned up during async initialization
|
|
144
|
+
if (!isCleanedUp) {
|
|
145
|
+
setSdk(sdkInstance);
|
|
146
|
+
sdkRef.current = sdkInstance;
|
|
147
|
+
logger_1.logger.log("Successfully initialized FormoAnalytics SDK");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Component was unmounted during initialization, clean up immediately
|
|
151
|
+
logger_1.logger.log("Component unmounted during initialization, cleaning up SDK");
|
|
152
|
+
sdkInstance.cleanup();
|
|
153
|
+
}
|
|
108
154
|
return [3 /*break*/, 4];
|
|
109
155
|
case 3:
|
|
110
156
|
error_1 = _a.sent();
|
|
111
|
-
|
|
157
|
+
if (!isCleanedUp) {
|
|
158
|
+
logger_1.logger.error("Failed to initialize FormoAnalytics SDK", error_1);
|
|
159
|
+
}
|
|
112
160
|
return [3 /*break*/, 4];
|
|
113
161
|
case 4: return [2 /*return*/];
|
|
114
162
|
}
|
|
115
163
|
});
|
|
116
164
|
}); };
|
|
117
165
|
initialize();
|
|
118
|
-
|
|
166
|
+
// Cleanup function to prevent memory leaks
|
|
167
|
+
// Using ref ensures we clean up the actual SDK instance, not the stale closure value
|
|
168
|
+
return function () {
|
|
169
|
+
isCleanedUp = true;
|
|
170
|
+
if (sdkRef.current && sdkRef.current !== defaultContext) {
|
|
171
|
+
logger_1.logger.log("Cleaning up FormoAnalytics SDK instance");
|
|
172
|
+
sdkRef.current.cleanup();
|
|
173
|
+
sdkRef.current = defaultContext;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
}, [writeKey, optionsKey]);
|
|
119
177
|
return ((0, jsx_runtime_1.jsx)(exports.FormoAnalyticsContext.Provider, { value: sdk, children: children }));
|
|
120
178
|
};
|
|
121
179
|
var useFormo = function () {
|
|
122
180
|
var context = (0, react_1.useContext)(exports.FormoAnalyticsContext);
|
|
123
181
|
if (!context) {
|
|
124
|
-
|
|
182
|
+
logger_1.logger.warn("useFormo called without a valid context");
|
|
125
183
|
}
|
|
126
184
|
return context; // Return undefined if SDK is not initialized, handle accordingly in consumer
|
|
127
185
|
};
|
|
@@ -32,4 +32,4 @@ export declare function getConsentFlag(projectId: string, key: string): string |
|
|
|
32
32
|
* @param key - The cookie key
|
|
33
33
|
*/
|
|
34
34
|
export declare function removeConsentFlag(projectId: string, key: string): void;
|
|
35
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
export declare const SESSION_TRAFFIC_SOURCE_KEY = "traffic-source";
|
|
2
|
-
export declare const SESSION_WALLET_DETECTED_KEY = "wallet-detected";
|
|
3
|
-
export declare const SESSION_WALLET_IDENTIFIED_KEY = "wallet-identified";
|
|
4
2
|
export declare const SESSION_CURRENT_URL_KEY = "analytics-current-url";
|
|
5
3
|
export declare const SESSION_USER_ID_KEY = "user-id";
|
|
6
4
|
export declare const LOCAL_ANONYMOUS_ID_KEY = "anonymous-id";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BLOCKED_ADDRESSES = exports.DEAD_ADDRESS = exports.ZERO_ADDRESS = exports.DEFAULT_PROVIDER_ICON = exports.CONSENT_OPT_OUT_KEY = exports.LOCAL_ANONYMOUS_ID_KEY = exports.SESSION_USER_ID_KEY = exports.SESSION_CURRENT_URL_KEY = exports.
|
|
3
|
+
exports.BLOCKED_ADDRESSES = exports.DEAD_ADDRESS = exports.ZERO_ADDRESS = exports.DEFAULT_PROVIDER_ICON = exports.CONSENT_OPT_OUT_KEY = exports.LOCAL_ANONYMOUS_ID_KEY = exports.SESSION_USER_ID_KEY = exports.SESSION_CURRENT_URL_KEY = exports.SESSION_TRAFFIC_SOURCE_KEY = void 0;
|
|
4
4
|
exports.SESSION_TRAFFIC_SOURCE_KEY = "traffic-source";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
// SESSION_WALLET_DETECTED_KEY and SESSION_WALLET_IDENTIFIED_KEY
|
|
6
|
+
// are now defined in src/session/index.ts
|
|
7
7
|
exports.SESSION_CURRENT_URL_KEY = "analytics-current-url";
|
|
8
8
|
exports.SESSION_USER_ID_KEY = "user-id";
|
|
9
9
|
exports.LOCAL_ANONYMOUS_ID_KEY = "anonymous-id";
|
|
@@ -5,7 +5,7 @@ exports.EVENTS_API_ORIGIN = "https://events.formo.so";
|
|
|
5
5
|
exports.EVENTS_API_HOST = "".concat(exports.EVENTS_API_ORIGIN, "/v0/raw_events");
|
|
6
6
|
var EVENTS_API_REQUEST_HEADER = function (writeKey) { return ({
|
|
7
7
|
"Content-Type": "application/json",
|
|
8
|
-
Authorization: "
|
|
8
|
+
Authorization: "Bearer ".concat(writeKey),
|
|
9
9
|
}); };
|
|
10
10
|
exports.EVENTS_API_REQUEST_HEADER = EVENTS_API_REQUEST_HEADER;
|
|
11
11
|
exports.COUNTRY_LIST = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Address, APIEvent, ChainID, IFormoEvent, IFormoEventContext, IFormoEventProperties, Nullable, Options, SignatureStatus, TransactionStatus } from "
|
|
1
|
+
import { Address, APIEvent, ChainID, IFormoEvent, IFormoEventContext, IFormoEventProperties, Nullable, Options, SignatureStatus, TransactionStatus } from "../types";
|
|
2
2
|
import { IEventFactory } from "./type";
|
|
3
3
|
declare class EventFactory implements IEventFactory {
|
|
4
4
|
private options?;
|
|
@@ -27,7 +27,7 @@ declare class EventFactory implements IEventFactory {
|
|
|
27
27
|
generateDisconnectEvent(chainId?: ChainID, address?: Address, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
|
|
28
28
|
generateChainChangedEvent(chainId: ChainID, address: Address, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
|
|
29
29
|
generateSignatureEvent(status: SignatureStatus, chainId: ChainID, address: Address, message: string, signatureHash?: string, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
|
|
30
|
-
generateTransactionEvent(status: TransactionStatus, chainId: ChainID, address: Address, data
|
|
30
|
+
generateTransactionEvent(status: TransactionStatus, chainId: ChainID, address: Address, data?: string, to?: string, value?: string, transactionHash?: string, function_name?: string, function_args?: Record<string, unknown>, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
|
|
31
31
|
generateTrackEvent(event: string, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
|
|
32
32
|
create(event: APIEvent, address?: Address, userId?: string): Promise<IFormoEvent>;
|
|
33
33
|
}
|
|
@@ -51,15 +51,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.EventFactory = void 0;
|
|
54
|
-
var constants_1 = require("
|
|
55
|
-
var utils_1 = require("
|
|
56
|
-
var address_1 = require("
|
|
57
|
-
var timestamp_1 = require("
|
|
58
|
-
var validators_1 = require("
|
|
54
|
+
var constants_1 = require("../constants");
|
|
55
|
+
var utils_1 = require("../utils");
|
|
56
|
+
var address_1 = require("../utils/address");
|
|
57
|
+
var timestamp_1 = require("../utils/timestamp");
|
|
58
|
+
var validators_1 = require("../validators");
|
|
59
59
|
var logger_1 = require("../logger");
|
|
60
60
|
var mergeDeepRight_1 = __importDefault(require("../ramda/mergeDeepRight"));
|
|
61
61
|
var storage_1 = require("../storage");
|
|
62
|
-
var version_1 = require("
|
|
62
|
+
var version_1 = require("../version");
|
|
63
63
|
var constants_2 = require("./constants");
|
|
64
64
|
var utils_2 = require("./utils");
|
|
65
65
|
var browsers_1 = require("../browser/browsers");
|
|
@@ -409,12 +409,12 @@ var EventFactory = /** @class */ (function () {
|
|
|
409
409
|
});
|
|
410
410
|
});
|
|
411
411
|
};
|
|
412
|
-
EventFactory.prototype.generateTransactionEvent = function (status, chainId, address, data, to, value, transactionHash, properties, context) {
|
|
412
|
+
EventFactory.prototype.generateTransactionEvent = function (status, chainId, address, data, to, value, transactionHash, function_name, function_args, properties, context) {
|
|
413
413
|
return __awaiter(this, void 0, void 0, function () {
|
|
414
414
|
var transactionEvent;
|
|
415
415
|
return __generator(this, function (_a) {
|
|
416
416
|
transactionEvent = {
|
|
417
|
-
properties: __assign(__assign({ status: status, chainId: chainId, data: data, to: to, value: value }, (transactionHash && { transactionHash: transactionHash })), properties),
|
|
417
|
+
properties: __assign(__assign(__assign(__assign(__assign(__assign(__assign({ status: status, chainId: chainId }, (data && { data: data })), (to && { to: to })), (value && { value: value })), (transactionHash && { transactionHash: transactionHash })), (function_name && { function_name: function_name })), (function_args && { function_args: function_args })), properties),
|
|
418
418
|
address: address,
|
|
419
419
|
type: "transaction",
|
|
420
420
|
};
|
|
@@ -493,7 +493,7 @@ var EventFactory = /** @class */ (function () {
|
|
|
493
493
|
case 14:
|
|
494
494
|
formoEvent = _b.sent();
|
|
495
495
|
return [3 /*break*/, 19];
|
|
496
|
-
case 15: return [4 /*yield*/, this.generateTransactionEvent(event.status, event.chainId, event.address, event.data, event.to, event.value, event.transactionHash, event.properties, event.context)];
|
|
496
|
+
case 15: return [4 /*yield*/, this.generateTransactionEvent(event.status, event.chainId, event.address, event.data, event.to, event.value, event.transactionHash, event.function_name, event.function_args, event.properties, event.context)];
|
|
497
497
|
case 16:
|
|
498
498
|
formoEvent = _b.sent();
|
|
499
499
|
return [3 /*break*/, 19];
|
|
@@ -50,7 +50,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
50
50
|
exports.EventManager = void 0;
|
|
51
51
|
var logger_1 = require("../logger");
|
|
52
52
|
var EventFactory_1 = require("./EventFactory");
|
|
53
|
-
var address_1 = require("
|
|
53
|
+
var address_1 = require("../utils/address");
|
|
54
54
|
/**
|
|
55
55
|
* A service to generate valid event payloads and queue them for processing
|
|
56
56
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateAnonymousId = void 0;
|
|
4
4
|
exports.getCookieDomain = getCookieDomain;
|
|
5
|
-
var utils_1 = require("
|
|
5
|
+
var utils_1 = require("../utils");
|
|
6
6
|
var storage_1 = require("../storage");
|
|
7
7
|
var generateAnonymousId = function (key) {
|
|
8
8
|
var storedAnonymousId = (0, storage_1.cookie)().get(key);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface FetchRetryError extends Error {
|
|
2
|
+
response?: Response;
|
|
3
|
+
}
|
|
4
|
+
type RetryOptions = {
|
|
5
|
+
retries?: number;
|
|
6
|
+
retryDelay?: (attempt: number) => number;
|
|
7
|
+
retryOn?: (attempt: number, error: FetchRetryError | null, response: Response | null) => boolean;
|
|
8
|
+
};
|
|
9
|
+
declare function fetchWithRetry(input: RequestInfo | URL, init?: RequestInit & RetryOptions): Promise<Response>;
|
|
10
|
+
export default fetchWithRetry;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
39
|
+
var t = {};
|
|
40
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
41
|
+
t[p] = s[p];
|
|
42
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
43
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
44
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
45
|
+
t[p[i]] = s[p[i]];
|
|
46
|
+
}
|
|
47
|
+
return t;
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
function fetchWithRetry(input, init) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
52
|
+
var _a, _b, retries, retryDelay, retryOn, fetchInit, _loop_1, attempt, state_1;
|
|
53
|
+
return __generator(this, function (_c) {
|
|
54
|
+
switch (_c.label) {
|
|
55
|
+
case 0:
|
|
56
|
+
_a = init || {}, _b = _a.retries, retries = _b === void 0 ? 0 : _b, retryDelay = _a.retryDelay, retryOn = _a.retryOn, fetchInit = __rest(_a, ["retries", "retryDelay", "retryOn"]);
|
|
57
|
+
_loop_1 = function (attempt) {
|
|
58
|
+
var isLastAttempt, response, responseError, error_1;
|
|
59
|
+
return __generator(this, function (_d) {
|
|
60
|
+
switch (_d.label) {
|
|
61
|
+
case 0:
|
|
62
|
+
isLastAttempt = attempt === retries;
|
|
63
|
+
_d.label = 1;
|
|
64
|
+
case 1:
|
|
65
|
+
_d.trys.push([1, 6, , 10]);
|
|
66
|
+
return [4 /*yield*/, globalThis.fetch(input, fetchInit)];
|
|
67
|
+
case 2:
|
|
68
|
+
response = _d.sent();
|
|
69
|
+
if (response.ok) {
|
|
70
|
+
return [2 /*return*/, { value: response }];
|
|
71
|
+
}
|
|
72
|
+
// On the last attempt, return whatever we got
|
|
73
|
+
if (isLastAttempt) {
|
|
74
|
+
return [2 /*return*/, { value: response }];
|
|
75
|
+
}
|
|
76
|
+
responseError = new Error(response.statusText);
|
|
77
|
+
responseError.response = response;
|
|
78
|
+
if (!(retryOn === null || retryOn === void 0 ? void 0 : retryOn(attempt, responseError, response))) return [3 /*break*/, 5];
|
|
79
|
+
if (!retryDelay) return [3 /*break*/, 4];
|
|
80
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, retryDelay(attempt)); })];
|
|
81
|
+
case 3:
|
|
82
|
+
_d.sent();
|
|
83
|
+
_d.label = 4;
|
|
84
|
+
case 4: return [2 /*return*/, "continue"];
|
|
85
|
+
case 5: return [2 /*return*/, { value: response }];
|
|
86
|
+
case 6:
|
|
87
|
+
error_1 = _d.sent();
|
|
88
|
+
// On the last attempt, throw immediately
|
|
89
|
+
if (isLastAttempt) {
|
|
90
|
+
throw error_1;
|
|
91
|
+
}
|
|
92
|
+
if (!(retryOn === null || retryOn === void 0 ? void 0 : retryOn(attempt, error_1, null))) return [3 /*break*/, 9];
|
|
93
|
+
if (!retryDelay) return [3 /*break*/, 8];
|
|
94
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, retryDelay(attempt)); })];
|
|
95
|
+
case 7:
|
|
96
|
+
_d.sent();
|
|
97
|
+
_d.label = 8;
|
|
98
|
+
case 8: return [2 /*return*/, "continue"];
|
|
99
|
+
case 9: throw error_1;
|
|
100
|
+
case 10: return [2 /*return*/];
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
attempt = 0;
|
|
105
|
+
_c.label = 1;
|
|
106
|
+
case 1:
|
|
107
|
+
if (!(attempt <= retries)) return [3 /*break*/, 4];
|
|
108
|
+
return [5 /*yield**/, _loop_1(attempt)];
|
|
109
|
+
case 2:
|
|
110
|
+
state_1 = _c.sent();
|
|
111
|
+
if (typeof state_1 === "object")
|
|
112
|
+
return [2 /*return*/, state_1.value];
|
|
113
|
+
_c.label = 3;
|
|
114
|
+
case 3:
|
|
115
|
+
attempt++;
|
|
116
|
+
return [3 /*break*/, 1];
|
|
117
|
+
case 4:
|
|
118
|
+
// Unreachable — the loop always returns or throws on the last attempt.
|
|
119
|
+
// Required to satisfy TypeScript's control flow analysis.
|
|
120
|
+
throw new Error("Unexpected: retry loop exited without returning or throwing");
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
exports.default = fetchWithRetry;
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider detection utilities for identifying wallet providers
|
|
3
|
+
*/
|
|
4
|
+
import { EIP1193Provider } from "../types";
|
|
5
|
+
/**
|
|
6
|
+
* Default icon for providers without custom icons
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_PROVIDER_ICON: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSIjRkZGIi8+CjxwYXRoIGQ9Ik0xNiA4TDggMjRoMTZMMTYgOHoiIGZpbGw9IiMzMzMiLz4KPC9zdmc+Cg==";
|
|
9
|
+
/**
|
|
10
|
+
* Common wallet provider flags used for detection
|
|
11
|
+
*/
|
|
12
|
+
export interface WalletProviderFlags {
|
|
13
|
+
isMetaMask?: boolean;
|
|
14
|
+
isCoinbaseWallet?: boolean;
|
|
15
|
+
isWalletConnect?: boolean;
|
|
16
|
+
isTrust?: boolean;
|
|
17
|
+
isBraveWallet?: boolean;
|
|
18
|
+
isPhantom?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Provider information returned by detection
|
|
22
|
+
*/
|
|
23
|
+
export interface ProviderInfo {
|
|
24
|
+
name: string;
|
|
25
|
+
rdns: string;
|
|
26
|
+
uuid: string;
|
|
27
|
+
icon: `data:image/${string}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Attempts to detect information about an injected provider by examining
|
|
31
|
+
* common wallet-specific flags and properties.
|
|
32
|
+
*
|
|
33
|
+
* @param provider The injected provider to analyze
|
|
34
|
+
* @returns Provider information with fallback values if detection fails
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const provider = window.ethereum;
|
|
39
|
+
* const info = detectInjectedProviderInfo(provider);
|
|
40
|
+
* console.log(info.name); // "MetaMask" or "Injected Provider"
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function detectInjectedProviderInfo(provider: EIP1193Provider): ProviderInfo;
|
|
44
|
+
/**
|
|
45
|
+
* Validates that a provider implements the required EIP-1193 interface
|
|
46
|
+
*
|
|
47
|
+
* @param provider The provider to validate
|
|
48
|
+
* @returns true if the provider has all required methods
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* if (isValidProvider(window.ethereum)) {
|
|
53
|
+
* // Safe to use provider
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function isValidProvider(provider: EIP1193Provider | undefined | null): provider is EIP1193Provider;
|
|
58
|
+
//# sourceMappingURL=detection.d.ts.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider detection utilities for identifying wallet providers
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_PROVIDER_ICON = void 0;
|
|
7
|
+
exports.detectInjectedProviderInfo = detectInjectedProviderInfo;
|
|
8
|
+
exports.isValidProvider = isValidProvider;
|
|
9
|
+
/**
|
|
10
|
+
* Default icon for providers without custom icons
|
|
11
|
+
*/
|
|
12
|
+
exports.DEFAULT_PROVIDER_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSIjRkZGIi8+CjxwYXRoIGQ9Ik0xNiA4TDggMjRoMTZMMTYgOHoiIGZpbGw9IiMzMzMiLz4KPC9zdmc+Cg==";
|
|
13
|
+
/**
|
|
14
|
+
* Known wallet providers with their identifying flags and metadata
|
|
15
|
+
*/
|
|
16
|
+
var KNOWN_PROVIDERS = [
|
|
17
|
+
{
|
|
18
|
+
flag: 'isMetaMask',
|
|
19
|
+
name: 'MetaMask',
|
|
20
|
+
rdns: 'io.metamask',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
flag: 'isCoinbaseWallet',
|
|
24
|
+
name: 'Coinbase Wallet',
|
|
25
|
+
rdns: 'com.coinbase.wallet',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
flag: 'isWalletConnect',
|
|
29
|
+
name: 'WalletConnect',
|
|
30
|
+
rdns: 'com.walletconnect',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
flag: 'isTrust',
|
|
34
|
+
name: 'Trust Wallet',
|
|
35
|
+
rdns: 'com.trustwallet',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
flag: 'isBraveWallet',
|
|
39
|
+
name: 'Brave Wallet',
|
|
40
|
+
rdns: 'com.brave.wallet',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
flag: 'isPhantom',
|
|
44
|
+
name: 'Phantom',
|
|
45
|
+
rdns: 'app.phantom',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
/**
|
|
49
|
+
* Attempts to detect information about an injected provider by examining
|
|
50
|
+
* common wallet-specific flags and properties.
|
|
51
|
+
*
|
|
52
|
+
* @param provider The injected provider to analyze
|
|
53
|
+
* @returns Provider information with fallback values if detection fails
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const provider = window.ethereum;
|
|
58
|
+
* const info = detectInjectedProviderInfo(provider);
|
|
59
|
+
* console.log(info.name); // "MetaMask" or "Injected Provider"
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
function detectInjectedProviderInfo(provider) {
|
|
63
|
+
// Default values for unknown providers
|
|
64
|
+
var name = "Injected Provider";
|
|
65
|
+
var rdns = "io.injected.provider";
|
|
66
|
+
// Cast to check for wallet-specific flags
|
|
67
|
+
var flags = provider;
|
|
68
|
+
// Check known providers in order of precedence
|
|
69
|
+
for (var _i = 0, KNOWN_PROVIDERS_1 = KNOWN_PROVIDERS; _i < KNOWN_PROVIDERS_1.length; _i++) {
|
|
70
|
+
var knownProvider = KNOWN_PROVIDERS_1[_i];
|
|
71
|
+
if (flags[knownProvider.flag]) {
|
|
72
|
+
name = knownProvider.name;
|
|
73
|
+
rdns = knownProvider.rdns;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
name: name,
|
|
79
|
+
rdns: rdns,
|
|
80
|
+
uuid: "injected-".concat(rdns.replace(/[^a-zA-Z0-9]/g, "-")),
|
|
81
|
+
icon: exports.DEFAULT_PROVIDER_ICON,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validates that a provider implements the required EIP-1193 interface
|
|
86
|
+
*
|
|
87
|
+
* @param provider The provider to validate
|
|
88
|
+
* @returns true if the provider has all required methods
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* if (isValidProvider(window.ethereum)) {
|
|
93
|
+
* // Safe to use provider
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
function isValidProvider(provider) {
|
|
98
|
+
return (!!provider &&
|
|
99
|
+
typeof provider.request === "function" &&
|
|
100
|
+
typeof provider.on === "function" &&
|
|
101
|
+
typeof provider.removeListener === "function");
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=detection.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider-related exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_PROVIDER_ICON = exports.isValidProvider = exports.detectInjectedProviderInfo = void 0;
|
|
7
|
+
var detection_1 = require("./detection");
|
|
8
|
+
Object.defineProperty(exports, "detectInjectedProviderInfo", { enumerable: true, get: function () { return detection_1.detectInjectedProviderInfo; } });
|
|
9
|
+
Object.defineProperty(exports, "isValidProvider", { enumerable: true, get: function () { return detection_1.isValidProvider; } });
|
|
10
|
+
Object.defineProperty(exports, "DEFAULT_PROVIDER_ICON", { enumerable: true, get: function () { return detection_1.DEFAULT_PROVIDER_ICON; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|