@formo/analytics 1.15.1 → 1.16.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/cjs/src/FormoAnalytics.d.ts +9 -3
- package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalytics.js +114 -122
- package/dist/cjs/src/FormoAnalytics.js.map +1 -1
- package/dist/cjs/src/constants/base.d.ts +1 -1
- package/dist/cjs/src/constants/base.d.ts.map +1 -1
- package/dist/cjs/src/constants/base.js +2 -2
- package/dist/cjs/src/constants/base.js.map +1 -1
- package/dist/cjs/src/constants/events.d.ts +1 -0
- package/dist/cjs/src/constants/events.d.ts.map +1 -1
- package/dist/cjs/src/constants/events.js +1 -0
- package/dist/cjs/src/constants/events.js.map +1 -1
- package/dist/cjs/src/lib/logger.d.ts +8 -1
- package/dist/cjs/src/lib/logger.d.ts.map +1 -1
- package/dist/cjs/src/lib/logger.js +15 -5
- package/dist/cjs/src/lib/logger.js.map +1 -1
- package/dist/cjs/src/lib/queue.d.ts +2 -2
- package/dist/cjs/src/lib/queue.d.ts.map +1 -1
- package/dist/cjs/src/lib/queue.js +14 -13
- package/dist/cjs/src/lib/queue.js.map +1 -1
- package/dist/cjs/src/types/events.d.ts +1 -1
- package/dist/cjs/src/types/events.d.ts.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/FormoAnalytics.d.ts +9 -3
- package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalytics.js +117 -125
- package/dist/esm/src/FormoAnalytics.js.map +1 -1
- package/dist/esm/src/constants/base.d.ts +1 -1
- package/dist/esm/src/constants/base.d.ts.map +1 -1
- package/dist/esm/src/constants/base.js +1 -1
- package/dist/esm/src/constants/base.js.map +1 -1
- package/dist/esm/src/constants/events.d.ts +1 -0
- package/dist/esm/src/constants/events.d.ts.map +1 -1
- package/dist/esm/src/constants/events.js +1 -0
- package/dist/esm/src/constants/events.js.map +1 -1
- package/dist/esm/src/lib/logger.d.ts +8 -1
- package/dist/esm/src/lib/logger.d.ts.map +1 -1
- package/dist/esm/src/lib/logger.js +15 -5
- package/dist/esm/src/lib/logger.js.map +1 -1
- package/dist/esm/src/lib/queue.d.ts +2 -2
- package/dist/esm/src/lib/queue.d.ts.map +1 -1
- package/dist/esm/src/lib/queue.js +14 -13
- package/dist/esm/src/lib/queue.js.map +1 -1
- package/dist/esm/src/types/events.d.ts +1 -1
- package/dist/esm/src/types/events.d.ts.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/FormoAnalytics.ts +97 -84
- package/src/constants/base.ts +3 -2
- package/src/constants/events.ts +8 -7
- package/src/lib/logger.ts +28 -6
- package/src/lib/queue.ts +12 -11
- package/src/types/events.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.min.js","mappings":"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","sources":["webpack://FormoAnalytics/webpack/universalModuleDefinition","webpack://FormoAnalytics/./node_modules/fetch-retry/dist/fetch-retry.umd.js","webpack://FormoAnalytics/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://FormoAnalytics/./node_modules/react/cjs/react.production.min.js","webpack://FormoAnalytics/./node_modules/react/index.js","webpack://FormoAnalytics/./node_modules/react/jsx-runtime.js","webpack://FormoAnalytics/./src/FormoAnalytics.ts","webpack://FormoAnalytics/./src/FormoAnalyticsProvider.tsx","webpack://FormoAnalytics/./src/constants/base.ts","webpack://FormoAnalytics/./src/constants/config.ts","webpack://FormoAnalytics/./src/constants/events.ts","webpack://FormoAnalytics/./src/constants/index.ts","webpack://FormoAnalytics/./src/constants/regex.ts","webpack://FormoAnalytics/./src/index.ts","webpack://FormoAnalytics/./src/lib/fetch.ts","webpack://FormoAnalytics/./src/lib/index.ts","webpack://FormoAnalytics/./src/lib/logger.ts","webpack://FormoAnalytics/./src/lib/queue.ts","webpack://FormoAnalytics/./src/lib/storage/index.ts","webpack://FormoAnalytics/./src/lib/storage/local.ts","webpack://FormoAnalytics/./src/lib/storage/native.ts","webpack://FormoAnalytics/./src/lib/storage/session.ts","webpack://FormoAnalytics/./src/types/events.ts","webpack://FormoAnalytics/./src/types/index.ts","webpack://FormoAnalytics/./src/utils/base.ts","webpack://FormoAnalytics/./src/utils/index.ts","webpack://FormoAnalytics/./src/utils/is.ts","webpack://FormoAnalytics/./node_modules/mipd/dist/cjs/index.js","webpack://FormoAnalytics/./node_modules/mipd/dist/cjs/store.js","webpack://FormoAnalytics/./node_modules/mipd/dist/cjs/utils.js","webpack://FormoAnalytics/./node_modules/is-network-error/index.js","webpack://FormoAnalytics/webpack/bootstrap","webpack://FormoAnalytics/webpack/runtime/define property getters","webpack://FormoAnalytics/webpack/runtime/global","webpack://FormoAnalytics/webpack/runtime/hasOwnProperty shorthand","webpack://FormoAnalytics/webpack/runtime/make namespace object","webpack://FormoAnalytics/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"FormoAnalytics\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FormoAnalytics\"] = factory();\n\telse\n\t\troot[\"FormoAnalytics\"] = factory();\n})(self, () => {\nreturn ","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.fetchRetry = factory());\n})(this, (function () { 'use strict';\n\n var fetchRetry = function (fetch, defaults) {\n defaults = defaults || {};\n if (typeof fetch !== 'function') {\n throw new ArgumentError('fetch must be a function');\n }\n\n if (typeof defaults !== 'object') {\n throw new ArgumentError('defaults must be an object');\n }\n\n if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) {\n throw new ArgumentError('retries must be a positive integer');\n }\n\n if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== 'function') {\n throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n }\n\n if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== 'function') {\n throw new ArgumentError('retryOn property expects an array or function');\n }\n\n var baseDefaults = {\n retries: 3,\n retryDelay: 1000,\n retryOn: [],\n };\n\n defaults = Object.assign(baseDefaults, defaults);\n\n return function fetchRetry(input, init) {\n var retries = defaults.retries;\n var retryDelay = defaults.retryDelay;\n var retryOn = defaults.retryOn;\n\n if (init && init.retries !== undefined) {\n if (isPositiveInteger(init.retries)) {\n retries = init.retries;\n } else {\n throw new ArgumentError('retries must be a positive integer');\n }\n }\n\n if (init && init.retryDelay !== undefined) {\n if (isPositiveInteger(init.retryDelay) || (typeof init.retryDelay === 'function')) {\n retryDelay = init.retryDelay;\n } else {\n throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n }\n }\n\n if (init && init.retryOn) {\n if (Array.isArray(init.retryOn) || (typeof init.retryOn === 'function')) {\n retryOn = init.retryOn;\n } else {\n throw new ArgumentError('retryOn property expects an array or function');\n }\n }\n\n // eslint-disable-next-line no-undef\n return new Promise(function (resolve, reject) {\n var wrappedFetch = function (attempt) {\n // As of node 18, this is no longer needed since node comes with native support for fetch:\n /* istanbul ignore next */\n var _input =\n typeof Request !== 'undefined' && input instanceof Request\n ? input.clone()\n : input;\n fetch(_input, init)\n .then(function (response) {\n if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n resolve(response);\n } else if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n return Promise.resolve(retryOn(attempt, null, response))\n .then(function (retryOnResponse) {\n if(retryOnResponse) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }).catch(reject);\n } catch (error) {\n reject(error);\n }\n } else {\n if (attempt < retries) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }\n })\n .catch(function (error) {\n if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n Promise.resolve(retryOn(attempt, error, null))\n .then(function (retryOnResponse) {\n if(retryOnResponse) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n })\n .catch(function(error) {\n reject(error);\n });\n } catch(error) {\n reject(error);\n }\n } else if (attempt < retries) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n });\n };\n\n function retry(attempt, error, response) {\n var delay = (typeof retryDelay === 'function') ?\n retryDelay(attempt, error, response) : retryDelay;\n setTimeout(function () {\n wrappedFetch(++attempt);\n }, delay);\n }\n\n wrappedFetch(0);\n });\n };\n };\n\n function isPositiveInteger(value) {\n return Number.isInteger(value) && value >= 0;\n }\n\n function ArgumentError(message) {\n this.name = 'ArgumentError';\n this.message = message;\n }\n\n return fetchRetry;\n\n}));\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createStore, EIP6963ProviderDetail } from \"mipd\";\nimport {\n LOCAL_ANONYMOUS_ID_KEY,\n COUNTRY_LIST,\n SESSION_CURRENT_URL_KEY,\n EVENTS_API_URL,\n Event,\n SESSION_USER_ID_KEY,\n EVENTS_API_REQUEST_HEADER,\n USER_API_URL,\n} from \"./constants\";\nimport {\n ChainID,\n Address,\n EIP1193Provider,\n Options,\n Config,\n RequestArguments,\n RPCError,\n SignatureStatus,\n TransactionStatus,\n RequestEvent,\n} from \"./types\";\nimport { session, local, logger, EventQueue, fetch } from \"./lib\";\nimport {\n isLocalhost,\n isAddress,\n toSnakeCase,\n generateNativeUUID,\n} from \"./utils\";\nimport { SESSION_IDENTIFIED_KEY } from \"./constants\";\nimport { UUID } from \"crypto\";\n\ninterface IFormoAnalytics {\n page(): void;\n reset(): void;\n connect(params: { chainId: ChainID; address: Address }): Promise<void>;\n disconnect(params?: { chainId?: ChainID; address?: Address }): Promise<void>;\n chain(params: { chainId: ChainID; address?: Address }): Promise<void>;\n signature({\n status,\n chainId,\n address,\n message,\n signatureHash,\n }: {\n status: SignatureStatus;\n chainId?: ChainID;\n address: Address;\n message: string;\n signatureHash?: string;\n }): Promise<void>;\n transaction({\n status,\n chainId,\n address,\n data,\n to,\n value,\n transactionHash,\n }: {\n status: TransactionStatus;\n chainId: ChainID;\n address: Address;\n data?: string;\n to?: string;\n value?: string;\n transactionHash?: string;\n }): Promise<void>;\n identify(params: { address: Address }): Promise<void>;\n track(action: string, payload: Record<string, any>): Promise<void>;\n}\n\nexport class FormoAnalytics implements IFormoAnalytics {\n private _provider?: EIP1193Provider;\n private _providerListeners: Record<string, (...args: unknown[]) => void> = {};\n private session: FormoAnalyticsSession;\n private eventQueue: EventQueue;\n private anonymousId: UUID | null = null;\n private userId: UUID | null = null;\n\n config: Config;\n currentChainId?: ChainID;\n currentConnectedAddress?: Address;\n\n private constructor(\n public readonly writeKey: string,\n public options: Options = {}\n ) {\n this.config = {\n writeKey,\n trackLocalhost: options.trackLocalhost || false,\n };\n\n this.session = new FormoAnalyticsSession();\n\n // Initialize logger with configuration from options\n const loggerConfig = options.logger || {\n enabled: false,\n };\n logger.setEnabled(loggerConfig.enabled);\n if (loggerConfig.levels) {\n logger.setEnabledLevels(loggerConfig.levels);\n }\n\n this.eventQueue = new EventQueue(this.config.writeKey, {\n url: EVENTS_API_URL,\n flushAt: options.flushAt,\n retryCount: options.retryCount,\n maxQueueSize: options.maxQueueSize,\n flushInterval: options.flushInterval,\n });\n\n this.anonymousId = this.getAnonymousId();\n this.getUserId(null).then((userId) => (this.userId = userId));\n\n // TODO: replace with eip6963\n const provider = options.provider || window?.ethereum;\n if (provider) {\n this.trackProvider(provider);\n }\n\n this.trackFirstPageHit();\n this.trackPageHits();\n }\n\n static async init(\n writeKey: string,\n options?: Options\n ): Promise<FormoAnalytics> {\n const analytics = new FormoAnalytics(writeKey, options);\n\n // Identify\n const providers = await analytics.getProviders();\n await analytics.identifyAll(providers);\n\n return analytics;\n }\n\n /*\n Public SDK functions\n */\n\n /**\n * Emits a page visit event with the current URL information, fire on page change.\n * @returns {Promise<void>}\n */\n public async page(): Promise<void> {\n await this.trackPageHit();\n }\n\n /**\n * Reset the current user session.\n * @returns {void}\n */\n public reset(): void {\n this.anonymousId = this.getAnonymousId();\n this.userId = null;\n local.remove(LOCAL_ANONYMOUS_ID_KEY);\n session.remove(SESSION_USER_ID_KEY);\n }\n\n /**\n * Emits a wallet connect event.\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @throws {Error} If chainId or address is empty\n * @returns {Promise<void>}\n */\n async connect({\n chainId,\n address,\n }: {\n chainId: ChainID;\n address: Address;\n }): Promise<void> {\n if (!chainId) {\n logger.warn(\"Connect: Chain ID cannot be empty\");\n }\n if (!address) {\n logger.warn(\"Connect: Address cannot be empty\");\n }\n\n this.currentChainId = chainId;\n this.currentConnectedAddress = address;\n\n await this.trackEvent(Event.CONNECT, {\n chainId,\n address,\n });\n }\n\n /**\n * Emits a wallet disconnect event.\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @returns {Promise<void>}\n */\n async disconnect(params?: {\n chainId?: ChainID;\n address?: Address;\n }): Promise<void> {\n const address = params?.address || this.currentConnectedAddress;\n const chainId = params?.chainId || this.currentChainId;\n\n await this.handleDisconnect(chainId, address);\n }\n\n /**\n * Emits a chain network change event.\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @throws {Error} If chainId is empty, zero, or not a valid number\n * @throws {Error} If no address is provided and no previous address is recorded\n * @returns {Promise<void>}\n */\n async chain({\n chainId,\n address,\n }: {\n chainId: ChainID;\n address?: Address;\n }): Promise<void> {\n if (!chainId || Number(chainId) === 0) {\n throw new Error(\"FormoAnalytics::chain: chainId cannot be empty or 0\");\n }\n if (isNaN(Number(chainId))) {\n throw new Error(\n \"FormoAnalytics::chain: chainId must be a valid decimal number\"\n );\n }\n if (!address && !this.currentConnectedAddress) {\n throw new Error(\n \"FormoAnalytics::chain: address was empty and no previous address has been recorded\"\n );\n }\n\n this.currentChainId = chainId;\n\n await this.trackEvent(Event.CHAIN_CHANGED, {\n chainId,\n address: address || this.currentConnectedAddress,\n });\n }\n\n /**\n * Emits a signature event.\n * @param {SignatureStatus} params.status - requested, confirmed, rejected\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @param {string} params.message\n * @param {string} params.signatureHash - only provided if status is confirmed\n * @returns {Promise<void>}\n */\n async signature({\n status,\n chainId,\n address,\n message,\n signatureHash,\n }: {\n status: SignatureStatus;\n chainId?: ChainID;\n address: Address;\n message: string;\n signatureHash?: string;\n }): Promise<void> {\n await this.trackEvent(Event.SIGNATURE, {\n status,\n chainId,\n address,\n message,\n ...(signatureHash && { signatureHash }),\n });\n }\n\n /**\n * Emits a transaction event.\n * @param {TransactionStatus} params.status - started, broadcasted, rejected\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @param {string} params.data\n * @param {string} params.to\n * @param {string} params.value\n * @param {string} params.transactionHash - only provided if status is broadcasted\n * @returns {Promise<void>}\n */\n async transaction({\n status,\n chainId,\n address,\n data,\n to,\n value,\n transactionHash,\n }: {\n status: TransactionStatus;\n chainId: ChainID;\n address: Address;\n data?: string;\n to?: string;\n value?: string;\n transactionHash?: string;\n }): Promise<void> {\n await this.trackEvent(Event.TRANSACTION, {\n status,\n chainId,\n address,\n data,\n to,\n value,\n ...(transactionHash && { transactionHash }),\n });\n }\n\n /**\n * Emits an identify event with current wallet address.\n * @param {Address} params.address\n * @returns {Promise<void>}\n */\n public async identify({\n address,\n providerName,\n rdns,\n }: {\n address: Address | null;\n providerName?: string;\n rdns?: string;\n }): Promise<void> {\n if (this.session.isIdentified())\n return logger.warn(\"Identify: Wallet already identified in this session\");\n\n this.session.identify();\n await this.trackEvent(Event.IDENTIFY, {\n address,\n providerName,\n rdns,\n });\n }\n\n /**\n * Emits a custom event with custom data.\n * @param {string} action\n * @param {Record<string, any>} payload\n * @returns {Promise<void>}\n */\n async track(action: string, payload: Record<string, any>): Promise<void> {\n await this.trackEvent(action, payload);\n }\n\n /*\n SDK tracking and event listener functions\n */\n\n private trackProvider(provider: EIP1193Provider): void {\n try {\n if (provider === this._provider) {\n logger.warn(\"TrackProvider: Provider already tracked.\");\n return;\n }\n\n this.currentChainId = undefined;\n this.currentConnectedAddress = undefined;\n\n if (this._provider) {\n const actions = Object.keys(this._providerListeners);\n for (const action of actions) {\n this._provider.removeListener(\n action,\n this._providerListeners[action]\n );\n delete this._providerListeners[action];\n }\n }\n\n this._provider = provider;\n\n // Register listeners for web3 provider events\n this.registerAddressChangedListener();\n this.registerChainChangedListener();\n this.registerSignatureListener();\n this.registerTransactionListener();\n } catch (error) {\n logger.error(\"Error tracking provider:\", error);\n }\n }\n\n private registerAddressChangedListener(): void {\n const listener = (...args: unknown[]) =>\n this.onAddressChanged(args[0] as string[]);\n\n this._provider?.on(\"accountsChanged\", listener);\n this._providerListeners[\"accountsChanged\"] = listener;\n\n const onAddressDisconnected = this.onAddressDisconnected.bind(this);\n this._provider?.on(\"disconnect\", onAddressDisconnected);\n this._providerListeners[\"disconnect\"] = onAddressDisconnected;\n }\n\n private registerChainChangedListener(): void {\n const listener = (...args: unknown[]) =>\n this.onChainChanged(args[0] as string);\n this.provider?.on(\"chainChanged\", listener);\n this._providerListeners[\"chainChanged\"] = listener;\n }\n\n private registerSignatureListener(): void {\n if (!this.provider) {\n logger.error(\"Provider not found for signature tracking\");\n return;\n }\n if (\n Object.getOwnPropertyDescriptor(this.provider, \"request\")?.writable ===\n false\n ) {\n logger.warn(\"Provider.request is not writable\");\n return;\n }\n\n const request = this.provider.request.bind(this.provider);\n this.provider.request = async <T>({\n method,\n params,\n }: RequestArguments): Promise<T | null | undefined> => {\n if (\n Array.isArray(params) &&\n [\"eth_signTypedData_v4\", \"personal_sign\"].includes(method)\n ) {\n // Emit signature request event\n this.signature({\n status: SignatureStatus.REQUESTED,\n ...this.buildSignatureEventPayload(method, params),\n });\n\n try {\n const response = (await request({ method, params })) as T;\n if (response) {\n // Emit signature confirmed event\n this.signature({\n status: SignatureStatus.CONFIRMED,\n ...this.buildSignatureEventPayload(method, params, response),\n });\n }\n return response;\n } catch (error) {\n const rpcError = error as RPCError;\n if (rpcError && rpcError?.code === 4001) {\n // Emit signature rejected event\n this.signature({\n status: SignatureStatus.REJECTED,\n ...this.buildSignatureEventPayload(method, params),\n });\n }\n throw error;\n }\n }\n return request({ method, params });\n };\n return;\n }\n\n private registerTransactionListener(): void {\n if (!this.provider) {\n logger.error(\"Provider not found for transaction tracking\");\n return;\n }\n if (\n Object.getOwnPropertyDescriptor(this.provider, \"request\")?.writable ===\n false\n ) {\n logger.warn(\"Provider.request is not writable\");\n return;\n }\n const request = this.provider.request.bind(this.provider);\n this.provider.request = async <T>({\n method,\n params,\n }: RequestArguments): Promise<T | null | undefined> => {\n if (\n Array.isArray(params) &&\n method === \"eth_sendTransaction\" &&\n params[0]\n ) {\n // Track transaction start\n const payload = await this.buildTransactionEventPayload(params);\n this.transaction({ status: TransactionStatus.STARTED, ...payload });\n\n try {\n // Wait for the transaction hash\n const transactionHash = (await request({ method, params })) as string;\n\n // Track transaction broadcast\n this.transaction({\n status: TransactionStatus.BROADCASTED,\n ...payload,\n transactionHash,\n });\n\n return;\n } catch (error) {\n logger.info(\"Transaction listener catch\");\n logger.error(\"Transaction error:\", error);\n const rpcError = error as RPCError;\n if (rpcError && rpcError?.code === 4001) {\n // Emit transaction rejected event\n this.transaction({\n status: TransactionStatus.REJECTED,\n ...payload,\n });\n }\n throw error;\n }\n }\n\n return request({ method, params });\n };\n\n return;\n }\n\n private async onAddressChanged(addresses: Address[]): Promise<void> {\n if (addresses.length > 0) {\n this.onAddressConnected(addresses[0]);\n } else {\n this.onAddressDisconnected();\n }\n }\n\n private async onAddressConnected(address: Address): Promise<void> {\n if (address === this.currentConnectedAddress)\n // We have already reported this address\n return;\n\n this.currentConnectedAddress = address;\n\n this.currentChainId = await this.getCurrentChainId();\n this.connect({ chainId: this.currentChainId, address });\n }\n\n private async handleDisconnect(\n chainId?: ChainID,\n address?: Address\n ): Promise<void> {\n const payload = {\n chain_id: chainId || this.currentChainId,\n address: address || this.currentConnectedAddress,\n };\n this.currentChainId = undefined;\n this.currentConnectedAddress = undefined;\n session.remove(SESSION_USER_ID_KEY);\n\n await this.trackEvent(Event.DISCONNECT, payload);\n }\n\n private async onAddressDisconnected(): Promise<void> {\n await this.handleDisconnect(\n this.currentChainId,\n this.currentConnectedAddress\n );\n }\n\n private async onChainChanged(chainIdHex: string): Promise<void> {\n this.currentChainId = parseInt(chainIdHex);\n if (!this.currentConnectedAddress) {\n if (!this.provider) {\n logger.info(\n \"OnChainChanged: Provider not found. CHAIN_CHANGED not reported\"\n );\n return Promise.resolve();\n }\n\n const address = await this.getAddress();\n if (!address) {\n logger.info(\n \"OnChainChanged: Unable to fetch or store connected address\"\n );\n return Promise.resolve();\n }\n this.currentConnectedAddress = address;\n this.userId = await this.getUserId(address);\n }\n\n // Proceed only if the address exists\n if (this.currentConnectedAddress) {\n return this.chain({\n chainId: this.currentChainId,\n address: this.currentConnectedAddress,\n });\n } else {\n logger.info(\n \"OnChainChanged: Current connected address is null despite fetch attempt\"\n );\n }\n }\n\n private async trackFirstPageHit(): Promise<void> {\n if (session.get(SESSION_CURRENT_URL_KEY) === null) {\n session.set(SESSION_CURRENT_URL_KEY, window.location.href);\n }\n\n return this.trackPageHit();\n }\n\n private async trackPageHits(): Promise<void> {\n const oldPushState = history.pushState;\n history.pushState = function pushState(...args) {\n const ret = oldPushState.apply(this, args);\n window.dispatchEvent(new window.Event(\"locationchange\"));\n return ret;\n };\n\n const oldReplaceState = history.replaceState;\n history.replaceState = function replaceState(...args) {\n const ret = oldReplaceState.apply(this, args);\n window.dispatchEvent(new window.Event(\"locationchange\"));\n return ret;\n };\n\n window.addEventListener(\"popstate\", () => this.onLocationChange());\n window.addEventListener(\"locationchange\", () => this.onLocationChange());\n }\n\n private async onLocationChange(): Promise<void> {\n const currentUrl = session.get(SESSION_CURRENT_URL_KEY);\n\n if (currentUrl !== window.location.href) {\n session.set(SESSION_CURRENT_URL_KEY, window.location.href);\n this.trackPageHit();\n }\n }\n\n private trackPageHit(): void {\n const pathname = window.location.pathname;\n const hash = window.location.hash;\n\n if (!this.config.trackLocalhost && isLocalhost()) {\n return logger.warn(\n \"Track page hit: Ignoring event because website is running locally\"\n );\n }\n\n setTimeout(async () => {\n this.trackEvent(Event.PAGE, {\n pathname,\n hash,\n });\n }, 300);\n }\n\n private async trackEvent(action: string, payload: any): Promise<void> {\n try {\n const address = await this.getAddress();\n const user_id = await this.getUserId(address);\n\n const requestData: RequestEvent = {\n anonymous_id: this.anonymousId as UUID,\n user_id,\n address,\n timestamp: new Date().toISOString(),\n action,\n version: \"1\",\n payload: await this.buildEventPayload(toSnakeCase(payload)),\n };\n\n await this.eventQueue.enqueue(requestData, (err, _, data) => {\n if (err) {\n logger.error(\"Error sending events:\", err);\n } else logger.info(`Events sent successfully: ${data.length} events`);\n });\n } catch (error) {\n logger.error(\"Error tracking event:\", error);\n }\n }\n\n /*\n Utility functions\n */\n\n private async getProviders(): Promise<readonly EIP6963ProviderDetail[]> {\n const store = createStore();\n let providers = store.getProviders();\n // TODO: consider using store.subscribe to detect changes to providers list\n store.subscribe((providerDetails) => (providers = providerDetails));\n\n // Fallback to injected provider if no providers are found\n if (providers.length === 0) {\n return window?.ethereum ? [window.ethereum] : [];\n }\n return providers;\n }\n\n private async identifyAll(\n providers: readonly EIP6963ProviderDetail[]\n ): Promise<void> {\n try {\n for (const eip6963ProviderDetail of providers) {\n if (!eip6963ProviderDetail) continue;\n const accounts = await this.getAccounts(\n eip6963ProviderDetail?.provider\n );\n // Identify with accounts\n if (accounts && accounts.length > 0) {\n for (const address of accounts) {\n await this.identify({\n address,\n providerName: eip6963ProviderDetail?.info.name,\n rdns: eip6963ProviderDetail?.info.rdns,\n });\n }\n } else {\n // Identify without accounts\n await this.identify({\n address: null,\n providerName: eip6963ProviderDetail?.info.name,\n rdns: eip6963ProviderDetail?.info.rdns,\n });\n }\n }\n } catch (err) {\n logger.error(\"Error identifying all:\", err);\n }\n }\n\n get provider(): EIP1193Provider | undefined {\n return this._provider;\n }\n\n private getAnonymousId(): UUID {\n const storedAnonymousId = local.get(LOCAL_ANONYMOUS_ID_KEY);\n if (storedAnonymousId && typeof storedAnonymousId === \"string\")\n return storedAnonymousId as UUID;\n const newAnonymousId = generateNativeUUID();\n local.set(LOCAL_ANONYMOUS_ID_KEY, newAnonymousId);\n return newAnonymousId;\n }\n\n private async getUserId(address: string | null): Promise<UUID | null> {\n const storedUserId = session.get(SESSION_USER_ID_KEY);\n if (storedUserId && typeof storedUserId === \"string\")\n return storedUserId as UUID;\n\n if (address) {\n const res = await fetch(`${USER_API_URL}?address=${address}`, {\n headers: EVENTS_API_REQUEST_HEADER(this.writeKey),\n method: \"GET\",\n });\n const data = await res.json();\n const userId = data?.data?.[0]?.user_id;\n if (userId) {\n session.set(SESSION_USER_ID_KEY, userId);\n return userId;\n }\n\n const newUserId = generateNativeUUID();\n session.set(SESSION_USER_ID_KEY, newUserId);\n return newUserId;\n }\n\n return null;\n }\n\n private async getAddress(): Promise<Address | null> {\n if (this.currentConnectedAddress) return this.currentConnectedAddress;\n if (!this?.provider) {\n logger.info(\"The provider is not set\");\n return null;\n }\n\n try {\n const accounts = await this.getAccounts();\n if (accounts && accounts.length > 0) {\n // TODO: fetch userId if account is valid, generate userId if no userId matches address from tinybird\n if (isAddress(accounts[0])) {\n return accounts[0];\n }\n }\n } catch (err) {\n logger.error(\"Failed to fetch accounts from provider:\", err);\n return null;\n }\n return null;\n }\n\n private async getAccounts(\n provider?: EIP1193Provider\n ): Promise<Address[] | null> {\n const p = provider || this.provider;\n try {\n const res: string[] | null | undefined = await p?.request({\n method: \"eth_accounts\",\n });\n if (!res || res.length === 0) return null;\n return res.filter(isAddress);\n } catch (err) {\n if ((err as any).code !== 4001) {\n logger.error(\n \"FormoAnalytics::getAccounts: eth_accounts threw an error\",\n err\n );\n }\n return null;\n }\n }\n\n private async getCurrentChainId(): Promise<number> {\n if (!this.provider) {\n logger.error(\"Provider not set for chain ID\");\n }\n\n let chainIdHex;\n try {\n chainIdHex = await this.provider?.request<string>({\n method: \"eth_chainId\",\n });\n if (!chainIdHex) {\n logger.info(\"Chain id not found\");\n return 0;\n }\n return parseInt(chainIdHex as string, 16);\n } catch (err) {\n logger.error(\"eth_chainId threw an error:\", err);\n return 0;\n }\n }\n\n private getLocation(): string | undefined {\n try {\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (timezone in COUNTRY_LIST)\n return COUNTRY_LIST[timezone as keyof typeof COUNTRY_LIST];\n return timezone;\n } catch (error) {\n logger.error(\"Error resolving timezone:\", error);\n return \"\";\n }\n }\n\n private getLanguage(): string {\n try {\n return (\n (navigator.languages && navigator.languages.length\n ? navigator.languages[0]\n : navigator.language) || \"en\"\n );\n } catch (error) {\n logger.error(\"Error resolving language:\", error);\n return \"en\";\n }\n }\n\n // Adds browser properties to the user-supplied payload\n private async buildEventPayload(\n eventSpecificPayload: Record<string, unknown> = {}\n ): Promise<Record<string, unknown>> {\n const url = new URL(window.location.href);\n const params = new URLSearchParams(url.search);\n\n const location = this.getLocation();\n const language = this.getLanguage();\n\n // common browser properties\n return {\n \"user-agent\": window.navigator.userAgent,\n href: url.href,\n locale: language,\n location,\n referrer: document.referrer,\n utm_source: params.get(\"utm_source\"),\n utm_medium: params.get(\"utm_medium\"),\n utm_campaign: params.get(\"utm_campaign\"),\n utm_content: params.get(\"utm_content\"),\n utm_term: params.get(\"utm_term\"),\n ref: params.get(\"ref\"),\n ...eventSpecificPayload,\n };\n }\n\n private buildSignatureEventPayload(\n method: string,\n params: unknown[],\n response?: unknown\n ) {\n const basePayload = {\n chainId: this.currentChainId,\n address:\n method === \"personal_sign\"\n ? (params[1] as Address)\n : (params[0] as Address),\n };\n\n if (method === \"personal_sign\") {\n const message = Buffer.from(\n (params[0] as string).slice(2),\n \"hex\"\n ).toString(\"utf8\");\n return {\n ...basePayload,\n message,\n ...(response ? { signatureHash: response as string } : {}),\n };\n }\n\n return {\n ...basePayload,\n message: params[1] as string,\n ...(response ? { signatureHash: response as string } : {}),\n };\n }\n\n private async buildTransactionEventPayload(params: unknown[]) {\n const { data, from, to, value } = params[0] as {\n data: string;\n from: string;\n to: string;\n value: string;\n };\n return {\n chainId: this.currentChainId || (await this.getCurrentChainId()),\n data,\n address: from,\n to,\n value,\n };\n }\n}\n\ninterface IFormoAnalyticsSession {\n isIdentified(): boolean;\n identify(): void;\n}\n\nclass FormoAnalyticsSession implements IFormoAnalyticsSession {\n constructor() {}\n\n public isIdentified(): boolean {\n return session.get(SESSION_IDENTIFIED_KEY) === true;\n }\n\n public identify(): void {\n session.set(SESSION_IDENTIFIED_KEY, true);\n }\n}\n","import { createContext, useContext, useEffect, useState, useRef } from \"react\";\nimport { FormoAnalytics } from \"./FormoAnalytics\";\nimport { FormoAnalyticsProviderProps } from \"./types\";\nimport { logger } from \"./lib\";\n\nexport const FormoAnalyticsContext = createContext<FormoAnalytics | undefined>(\n undefined\n);\n\nexport const FormoAnalyticsProvider = (props: FormoAnalyticsProviderProps) => {\n const { writeKey, disabled, children } = props;\n\n // Keep the app running without analytics if no Write Key is provided or disabled\n if (!writeKey) {\n logger.error(\"FormoAnalyticsProvider: No Write Key provided\");\n return children;\n }\n\n if (disabled) {\n logger.warn(\"FormoAnalytics is disabled\");\n return children;\n }\n\n return <InitializedAnalytics {...props} />;\n};\n\nconst InitializedAnalytics = ({\n writeKey,\n options,\n children,\n}: FormoAnalyticsProviderProps) => {\n const [sdk, setSdk] = useState<FormoAnalytics | undefined>();\n const initializedStartedRef = useRef(false);\n\n const initializeFormoAnalytics = async (writeKey: string, options: any) => {\n try {\n const sdkInstance = await FormoAnalytics.init(writeKey, options);\n setSdk(sdkInstance);\n logger.log(\"FormoAnalytics SDK initialized successfully\");\n } catch (error) {\n logger.error(\"Failed to initialize FormoAnalytics SDK\", error);\n }\n };\n\n useEffect(() => {\n const initialize = async () => {\n if (initializedStartedRef.current) return;\n initializedStartedRef.current = true;\n\n await initializeFormoAnalytics(writeKey!, options);\n };\n\n initialize();\n }, [writeKey, options]);\n\n return (\n <FormoAnalyticsContext.Provider value={sdk}>\n {children}\n </FormoAnalyticsContext.Provider>\n );\n};\n\nexport const useFormoAnalytics = () => {\n const context = useContext(FormoAnalyticsContext);\n\n if (!context) {\n logger.warn(\"useFormoAnalytics called without a valid context\");\n }\n\n return context; // Return undefined if SDK is not initialized, handle accordingly in consumer\n};\n","const STORAGE_PREFIX = \"formo-\";\n\nconst generateStoragePrefix = (prefix: string) => `${STORAGE_PREFIX}${prefix}`;\n\nexport const SESSION_IDENTIFIED_KEY =\n generateStoragePrefix(\"session-identified\");\nexport const SESSION_CURRENT_URL_KEY = generateStoragePrefix(\n \"analytics-current-url\"\n);\nexport const SESSION_USER_ID_KEY = generateStoragePrefix(\"user-id\");\n\nexport const LOCAL_ANONYMOUS_ID_KEY = generateStoragePrefix(\"anonymous-id\");\n","export const EVENTS_API_HOST = \"https://events.formo.so\";\nexport const EVENTS_API_URL = `${EVENTS_API_HOST}/events`;\nexport const USER_API_URL = `${EVENTS_API_HOST}/user`;\n\nexport const EVENTS_API_REQUEST_HEADER = (writeKey: string) => ({\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${writeKey}`,\n});\n\nexport const COUNTRY_LIST = {\n // Africa\n \"Africa/Abidjan\": \"CI\",\n \"Africa/Accra\": \"GH\",\n \"Africa/Addis_Ababa\": \"ET\",\n \"Africa/Algiers\": \"DZ\",\n \"Africa/Asmara\": \"ER\",\n \"Africa/Asmera\": \"ER\",\n \"Africa/Bamako\": \"ML\",\n \"Africa/Bangui\": \"CF\",\n \"Africa/Banjul\": \"GM\",\n \"Africa/Bissau\": \"GW\",\n \"Africa/Blantyre\": \"MW\",\n \"Africa/Brazzaville\": \"CG\",\n \"Africa/Bujumbura\": \"BI\",\n \"Africa/Cairo\": \"EG\",\n \"Africa/Casablanca\": \"MA\",\n \"Africa/Ceuta\": \"ES\",\n \"Africa/Conakry\": \"GN\",\n \"Africa/Dakar\": \"SN\",\n \"Africa/Dar_es_Salaam\": \"TZ\",\n \"Africa/Djibouti\": \"DJ\",\n \"Africa/Douala\": \"CM\",\n \"Africa/El_Aaiun\": \"EH\",\n \"Africa/Freetown\": \"SL\",\n \"Africa/Gaborone\": \"BW\",\n \"Africa/Harare\": \"ZW\",\n \"Africa/Johannesburg\": \"ZA\",\n \"Africa/Juba\": \"SS\",\n \"Africa/Kampala\": \"UG\",\n \"Africa/Khartoum\": \"SD\",\n \"Africa/Kigali\": \"RW\",\n \"Africa/Kinshasa\": \"CD\",\n \"Africa/Lagos\": \"NG\",\n \"Africa/Libreville\": \"GA\",\n \"Africa/Lome\": \"TG\",\n \"Africa/Luanda\": \"AO\",\n \"Africa/Lubumbashi\": \"CD\",\n \"Africa/Lusaka\": \"ZM\",\n \"Africa/Malabo\": \"GQ\",\n \"Africa/Maputo\": \"MZ\",\n \"Africa/Maseru\": \"LS\",\n \"Africa/Mbabane\": \"SZ\",\n \"Africa/Mogadishu\": \"SO\",\n \"Africa/Monrovia\": \"LR\",\n \"Africa/Nairobi\": \"KE\",\n \"Africa/Ndjamena\": \"TD\",\n \"Africa/Niamey\": \"NE\",\n \"Africa/Nouakchott\": \"MR\",\n \"Africa/Ouagadougou\": \"BF\",\n \"Africa/Porto-Novo\": \"BJ\",\n \"Africa/Sao_Tome\": \"ST\",\n \"Africa/Timbuktu\": \"ML\",\n \"Africa/Tripoli\": \"LY\",\n \"Africa/Tunis\": \"TN\",\n \"Africa/Windhoek\": \"NA\",\n // America\n \"America/Adak\": \"US\",\n \"America/Anchorage\": \"US\",\n \"America/Anguilla\": \"AI\",\n \"America/Antigua\": \"AG\",\n \"America/Araguaina\": \"BR\",\n \"America/Argentina/Buenos_Aires\": \"AR\",\n \"America/Argentina/Catamarca\": \"AR\",\n \"America/Argentina/ComodRivadavia\": \"AR\",\n \"America/Argentina/Cordoba\": \"AR\",\n \"America/Argentina/Jujuy\": \"AR\",\n \"America/Argentina/La_Rioja\": \"AR\",\n \"America/Argentina/Mendoza\": \"AR\",\n \"America/Argentina/Rio_Gallegos\": \"AR\",\n \"America/Argentina/Salta\": \"AR\",\n \"America/Argentina/San_Juan\": \"AR\",\n \"America/Argentina/San_Luis\": \"AR\",\n \"America/Argentina/Tucuman\": \"AR\",\n \"America/Argentina/Ushuaia\": \"AR\",\n \"America/Aruba\": \"AW\",\n \"America/Asuncion\": \"PY\",\n \"America/Atikokan\": \"CA\",\n \"America/Atka\": \"US\",\n \"America/Bahia\": \"BR\",\n \"America/Bahia_Banderas\": \"MX\",\n \"America/Barbados\": \"BB\",\n \"America/Belem\": \"BR\",\n \"America/Belize\": \"BZ\",\n \"America/Blanc-Sablon\": \"CA\",\n \"America/Boa_Vista\": \"BR\",\n \"America/Bogota\": \"CO\",\n \"America/Boise\": \"US\",\n \"America/Buenos_Aires\": \"AR\",\n \"America/Cambridge_Bay\": \"CA\",\n \"America/Campo_Grande\": \"BR\",\n \"America/Cancun\": \"MX\",\n \"America/Caracas\": \"VE\",\n \"America/Catamarca\": \"AR\",\n \"America/Cayenne\": \"GF\",\n \"America/Cayman\": \"KY\",\n \"America/Chicago\": \"US\",\n \"America/Chihuahua\": \"MX\",\n \"America/Ciudad_Juarez\": \"MX\",\n \"America/Coral_Harbour\": \"CA\",\n \"America/Cordoba\": \"AR\",\n \"America/Costa_Rica\": \"CR\",\n \"America/Creston\": \"CA\",\n \"America/Cuiaba\": \"BR\",\n \"America/Curacao\": \"CW\",\n \"America/Danmarkshavn\": \"GL\",\n \"America/Dawson\": \"CA\",\n \"America/Dawson_Creek\": \"CA\",\n \"America/Denver\": \"US\",\n \"America/Detroit\": \"US\",\n \"America/Dominica\": \"DM\",\n \"America/Edmonton\": \"CA\",\n \"America/Eirunepe\": \"BR\",\n \"America/El_Salvador\": \"SV\",\n \"America/Ensenada\": \"MX\",\n \"America/Fort_Nelson\": \"CA\",\n \"America/Fort_Wayne\": \"US\",\n \"America/Fortaleza\": \"BR\",\n \"America/Glace_Bay\": \"CA\",\n \"America/Godthab\": \"GL\",\n \"America/Goose_Bay\": \"CA\",\n \"America/Grand_Turk\": \"TC\",\n \"America/Grenada\": \"GD\",\n \"America/Guadeloupe\": \"GP\",\n \"America/Guatemala\": \"GT\",\n \"America/Guayaquil\": \"EC\",\n \"America/Guyana\": \"GY\",\n \"America/Halifax\": \"CA\",\n \"America/Havana\": \"CU\",\n \"America/Hermosillo\": \"MX\",\n \"America/Indiana/Indianapoli\": \"US\",\n \"America/Indiana/Knox\": \"US\",\n \"America/Indiana/Marengo\": \"US\",\n \"America/Indiana/Petersburg\": \"US\",\n \"America/Indiana/Tell_City\": \"US\",\n \"America/Indiana/Vevay\": \"US\",\n \"America/Indiana/Vincennes\": \"US\",\n \"America/Indiana/Winamac\": \"US\",\n \"America/Indianapoli\": \"US\",\n \"America/Inuvik\": \"CA\",\n \"America/Iqaluit\": \"CA\",\n \"America/Jamaica\": \"JM\",\n \"America/Jujuy\": \"AR\",\n \"America/Juneau\": \"US\",\n \"America/Kentucky/Louisville\": \"US\",\n \"America/Kentucky/Monticello\": \"US\",\n \"America/Knox_IN\": \"US\",\n \"America/Kralendijk\": \"BQ\",\n \"America/La_Paz\": \"BO\",\n \"America/Lima\": \"PE\",\n \"America/Los_Angeles\": \"US\",\n \"America/Louisville\": \"US\",\n \"America/Lower_Princes\": \"SX\",\n \"America/Maceio\": \"BR\",\n \"America/Managua\": \"NI\",\n \"America/Manaus\": \"BR\",\n \"America/Marigot\": \"MF\",\n \"America/Martinique\": \"MQ\",\n \"America/Matamoros\": \"MX\",\n \"America/Mazatlan\": \"MX\",\n \"America/Mendoza\": \"AR\",\n \"America/Menominee\": \"US\",\n \"America/Merida\": \"MX\",\n \"America/Metlakatla\": \"US\",\n \"America/Mexico_City\": \"MX\",\n \"America/Miquelon\": \"PM\",\n \"America/Moncton\": \"CA\",\n \"America/Monterrey\": \"MX\",\n \"America/Montevideo\": \"UY\",\n \"America/Montreal\": \"CA\",\n \"America/Montserrat\": \"MS\",\n \"America/Nassau\": \"BS\",\n \"America/New_York\": \"US\",\n \"America/Nipigon\": \"CA\",\n \"America/Nome\": \"US\",\n \"America/Noronha\": \"BR\",\n \"America/North_Dakota/Beulah\": \"US\",\n \"America/North_Dakota/Center\": \"US\",\n \"America/North_Dakota/New_Salem\": \"US\",\n \"America/Nuuk\": \"GL\",\n \"America/Ojinaga\": \"MX\",\n \"America/Panama\": \"PA\",\n \"America/Pangnirtung\": \"CA\",\n \"America/Paramaribo\": \"SR\",\n \"America/Phoenix\": \"US,CA\",\n \"America/Port-au-Prince\": \"HT\",\n \"America/Port_of_Spain\": \"TT\",\n \"America/Porto_Acre\": \"BR\",\n \"America/Porto_Velho\": \"BR\",\n \"America/Puerto_Rico\": \"PR\",\n \"America/Punta_Arenas\": \"CL\",\n \"America/Rainy_River\": \"CA\",\n \"America/Rankin_Inlet\": \"CA\",\n \"America/Recife\": \"BR\",\n \"America/Regina\": \"CA\",\n \"America/Resolute\": \"CA\",\n \"America/Rio_Branco\": \"BR\",\n \"America/Rosario\": \"AR\",\n \"America/Santa_Isabel\": \"MX\",\n \"America/Santarem\": \"BR\",\n \"America/Santiago\": \"CL\",\n \"America/Santo_Domingo\": \"DO\",\n \"America/Sao_Paulo\": \"BR\",\n \"America/Scoresbysund\": \"GL\",\n \"America/Shiprock\": \"US\",\n \"America/Sitka\": \"US\",\n \"America/St_Barthelemy\": \"BL\",\n \"America/St_Johns\": \"CA\",\n \"America/St_Kitts\": \"KN\",\n \"America/St_Lucia\": \"LC\",\n \"America/St_Thomas\": \"VI\",\n \"America/St_Vincent\": \"VC\",\n \"America/Swift_Current\": \"CA\",\n \"America/Tegucigalpa\": \"HN\",\n \"America/Thule\": \"GL\",\n \"America/Thunder_Bay\": \"CA\",\n \"America/Tijuana\": \"MX\",\n \"America/Toronto\": \"CA\",\n \"America/Tortola\": \"VG\",\n \"America/Vancouver\": \"CA\",\n \"America/Virgin\": \"VI\",\n \"America/Whitehorse\": \"CA\",\n \"America/Winnipeg\": \"CA\",\n \"America/Yakutat\": \"US\",\n \"America/Yellowknife\": \"CA\",\n // Antarctica\n \"Antarctica/Casey\": \"AQ\",\n \"Antarctica/Davis\": \"AQ\",\n \"Antarctica/DumontDUrville\": \"AQ\",\n \"Antarctica/Macquarie\": \"AU\",\n \"Antarctica/Mawson\": \"AQ\",\n \"Antarctica/McMurdo\": \"AQ\",\n \"Antarctica/Palmer\": \"AQ\",\n \"Antarctica/Rothera\": \"AQ\",\n \"Antarctica/South_Pole\": \"AQ\",\n \"Antarctica/Syowa\": \"AQ\",\n \"Antarctica/Troll\": \"AQ\",\n \"Antarctica/Vostok\": \"AQ\",\n // Arctic\n \"Arctic/Longyearbyen\": \"SJ\",\n // Asia\n \"Asia/Aden\": \"YE\",\n \"Asia/Almaty\": \"KZ\",\n \"Asia/Amman\": \"JO\",\n \"Asia/Anadyr\": \"RU\",\n \"Asia/Aqtau\": \"KZ\",\n \"Asia/Aqtobe\": \"KZ\",\n \"Asia/Ashgabat\": \"TM\",\n \"Asia/Ashkhabad\": \"TM\",\n \"Asia/Atyrau\": \"KZ\",\n \"Asia/Baghdad\": \"IQ\",\n \"Asia/Bahrain\": \"BH\",\n \"Asia/Baku\": \"AZ\",\n \"Asia/Bangkok\": \"TH\",\n \"Asia/Barnaul\": \"RU\",\n \"Asia/Beirut\": \"LB\",\n \"Asia/Bishkek\": \"KG\",\n \"Asia/Brunei\": \"BN\",\n \"Asia/Calcutta\": \"IN\",\n \"Asia/Chita\": \"RU\",\n \"Asia/Choibalsan\": \"MN\",\n \"Asia/Chongqing\": \"CN\",\n \"Asia/Chungking\": \"CN\",\n \"Asia/Colombo\": \"LK\",\n \"Asia/Dacca\": \"BD\",\n \"Asia/Damascus\": \"SY\",\n \"Asia/Dhaka\": \"BD\",\n \"Asia/Dili\": \"TL\",\n \"Asia/Dubai\": \"AE\",\n \"Asia/Dushanbe\": \"TJ\",\n \"Asia/Famagusta\": \"CY\",\n \"Asia/Gaza\": \"PS\",\n \"Asia/Harbin\": \"CN\",\n \"Asia/Hebron\": \"PS\",\n \"Asia/Ho_Chi_Minh\": \"VN\",\n \"Asia/Hong_Kong\": \"HK\",\n \"Asia/Hovd\": \"MN\",\n \"Asia/Irkutsk\": \"RU\",\n \"Asia/Istanbul\": \"TR\",\n \"Asia/Jakarta\": \"ID\",\n \"Asia/Jayapura\": \"ID\",\n \"Asia/Jerusalem\": \"IL\",\n \"Asia/Kabul\": \"AF\",\n \"Asia/Kamchatka\": \"RU\",\n \"Asia/Karachi\": \"PK\",\n \"Asia/Kashgar\": \"CN\",\n \"Asia/Kathmandu\": \"NP\",\n \"Asia/Katmandu\": \"NP\",\n \"Asia/Khandyga\": \"RU\",\n \"Asia/Kolkata\": \"IN\",\n \"Asia/Krasnoyarsk\": \"RU\",\n \"Asia/Kuala_Lumpur\": \"MY\",\n \"Asia/Kuching\": \"MY\",\n \"Asia/Kuwait\": \"KW\",\n \"Asia/Macao\": \"MO\",\n \"Asia/Macau\": \"MO\",\n \"Asia/Magadan\": \"RU\",\n \"Asia/Makassar\": \"ID\",\n \"Asia/Manila\": \"PH\",\n \"Asia/Muscat\": \"OM\",\n \"Asia/Nicosia\": \"CY\",\n \"Asia/Novokuznetsk\": \"RU\",\n \"Asia/Novosibirsk\": \"RU\",\n \"Asia/Omsk\": \"RU\",\n \"Asia/Oral\": \"KZ\",\n \"Asia/Phnom_Penh\": \"KH\",\n \"Asia/Pontianak\": \"ID\",\n \"Asia/Pyongyang\": \"KP\",\n \"Asia/Qatar\": \"QA\",\n \"Asia/Qostanay\": \"KZ\",\n \"Asia/Qyzylorda\": \"KZ\",\n \"Asia/Rangoon\": \"MM\",\n \"Asia/Riyadh\": \"SA\",\n \"Asia/Saigon\": \"VN\",\n \"Asia/Sakhalin\": \"RU\",\n \"Asia/Samarkand\": \"UZ\",\n \"Asia/Seoul\": \"KR\",\n \"Asia/Shanghai\": \"CN\",\n \"Asia/Singapore\": \"SG\",\n \"Asia/Srednekolymsk\": \"RU\",\n \"Asia/Taipei\": \"TW\",\n \"Asia/Tashkent\": \"UZ\",\n \"Asia/Tbilisi\": \"GE\",\n \"Asia/Tehran\": \"IR\",\n \"Asia/Tel_Aviv\": \"IL\",\n \"Asia/Thimbu\": \"BT\",\n \"Asia/Thimphu\": \"BT\",\n \"Asia/Tokyo\": \"JP\",\n \"Asia/Tomsk\": \"RU\",\n \"Asia/Ujung_Pandang\": \"ID\",\n \"Asia/Ulaanbaatar\": \"MN\",\n \"Asia/Ulan_Bator\": \"MN\",\n \"Asia/Urumqi\": \"CN\",\n \"Asia/Ust-Nera\": \"RU\",\n \"Asia/Vientiane\": \"LA\",\n \"Asia/Vladivostok\": \"RU\",\n \"Asia/Yakutsk\": \"RU\",\n \"Asia/Yangon\": \"MM\",\n \"Asia/Yekaterinburg\": \"RU\",\n \"Asia/Yerevan\": \"AM\",\n // Atlantic\n \"Atlantic/Azores\": \"PT\",\n \"Atlantic/Bermuda\": \"BM\",\n \"Atlantic/Canary\": \"ES\",\n \"Atlantic/Cape_Verde\": \"CV\",\n \"Atlantic/Faeroe\": \"FO\",\n \"Atlantic/Faroe\": \"FO\",\n \"Atlantic/Jan_Mayen\": \"SJ\",\n \"Atlantic/Madeira\": \"PT\",\n \"Atlantic/Reykjavik\": \"IS\",\n \"Atlantic/South_Georgia\": \"GS\",\n \"Atlantic/St_Helena\": \"SH\",\n \"Atlantic/Stanley\": \"FK\",\n // Australia\n \"Australia/ACT\": \"AU\",\n \"Australia/Adelaide\": \"AU\",\n \"Australia/Brisbane\": \"AU\",\n \"Australia/Broken_Hill\": \"AU\",\n \"Australia/Canberra\": \"AU\",\n \"Australia/Currie\": \"AU\",\n \"Australia/Darwin\": \"AU\",\n \"Australia/Eucla\": \"AU\",\n \"Australia/Hobart\": \"AU\",\n \"Australia/LHI\": \"AU\",\n \"Australia/Lindeman\": \"AU\",\n \"Australia/Lord_Howe\": \"AU\",\n \"Australia/Melbourne\": \"AU\",\n \"Australia/North\": \"AU\",\n \"Australia/NSW\": \"AU\",\n \"Australia/Perth\": \"AU\",\n \"Australia/Queensland\": \"AU\",\n \"Australia/South\": \"AU\",\n \"Australia/Sydney\": \"AU\",\n \"Australia/Tasmania\": \"AU\",\n \"Australia/Victoria\": \"AU\",\n \"Australia/West\": \"AU\",\n \"Australia/Yancowinna\": \"AU\",\n // Brazil\n \"Brazil/Acre\": \"BR\",\n \"Brazil/DeNoronha\": \"BR\",\n \"Brazil/East\": \"BR\",\n \"Brazil/West\": \"BR\",\n // Canada\n \"Canada/Atlantic\": \"CA\",\n \"Canada/Central\": \"CA\",\n \"Canada/Eastern\": \"CA\",\n \"Canada/Mountain\": \"CA\",\n \"Canada/Newfoundland\": \"CA\",\n \"Canada/Pacific\": \"CA\",\n \"Canada/Saskatchewan\": \"CA\",\n \"Canada/Yukon\": \"CA\",\n // CET\n CET: \"CET\",\n // Chile\n \"Chile/Continental\": \"CL\",\n \"Chile/EasterIsland\": \"CL\",\n // CST6CDT\n CST6CDT: \"CST6CDT\",\n // Cuba\n Cuba: \"CU\",\n // EET\n EET: \"EET\",\n // Egypt\n Egypt: \"EG\",\n // Eire\n Eire: \"IE\",\n // EST\n EST: \"EST\",\n EST5EDT: \"EST5EDT\",\n \"Etc/GMT\": \"Etc/GMT\",\n \"Etc/GMT+0\": \"Etc/GMT+0\",\n \"Etc/GMT+1\": \"Etc/GMT+1\",\n \"Etc/GMT+10\": \"Etc/GMT+10\",\n \"Etc/GMT+11\": \"Etc/GMT+11\",\n \"Etc/GMT+12\": \"Etc/GMT+12\",\n \"Etc/GMT+2\": \"Etc/GMT+2\",\n \"Etc/GMT+3\": \"Etc/GMT+3\",\n \"Etc/GMT+4\": \"Etc/GMT+4\",\n \"Etc/GMT+5\": \"Etc/GMT+5\",\n \"Etc/GMT+6\": \"Etc/GMT+6\",\n \"Etc/GMT+7\": \"Etc/GMT+7\",\n \"Etc/GMT+8\": \"Etc/GMT+8\",\n \"Etc/GMT+9\": \"Etc/GMT+9\",\n \"Etc/GMT-0\": \"Etc/GMT-0\",\n \"Etc/GMT-1\": \"Etc/GMT-1\",\n \"Etc/GMT-10\": \"Etc/GMT-10\",\n \"Etc/GMT-11\": \"Etc/GMT-11\",\n \"Etc/GMT-12\": \"Etc/GMT-12\",\n \"Etc/GMT-13\": \"Etc/GMT-13\",\n \"Etc/GMT-14\": \"Etc/GMT-14\",\n \"Etc/GMT-2\": \"Etc/GMT-2\",\n \"Etc/GMT-3\": \"Etc/GMT-3\",\n \"Etc/GMT-4\": \"Etc/GMT-4\",\n \"Etc/GMT-5\": \"Etc/GMT-5\",\n \"Etc/GMT-6\": \"Etc/GMT-6\",\n \"Etc/GMT-7\": \"Etc/GMT-7\",\n \"Etc/GMT-8\": \"Etc/GMT-8\",\n \"Etc/GMT-9\": \"Etc/GMT-9\",\n \"Etc/GMT0\": \"Etc/GMT0\",\n \"Etc/Greenwich\": \"Etc/Greenwich\",\n \"Etc/UCT\": \"Etc/UCT\",\n \"Etc/UTC\": \"Etc/UTC\",\n \"Etc/Universal\": \"Etc/Universal\",\n \"Etc/Zulu\": \"Etc/Zulu\",\n // Europe\n \"Europe/Amsterdam\": \"NL\",\n \"Europe/Andorra\": \"AD\",\n \"Europe/Astrakhan\": \"RU\",\n \"Europe/Athens\": \"GR\",\n \"Europe/Belfast\": \"GB\",\n \"Europe/Belgrade\": \"RS\",\n \"Europe/Berlin\": \"DE\",\n \"Europe/Bratislava\": \"SK\",\n \"Europe/Brussels\": \"BE\",\n \"Europe/Bucharest\": \"RO\",\n \"Europe/Budapest\": \"HU\",\n \"Europe/Busingen\": \"DE\",\n \"Europe/Chisinau\": \"MD\",\n \"Europe/Copenhagen\": \"DK\",\n \"Europe/Dublin\": \"IE\",\n \"Europe/Gibraltar\": \"GI\",\n \"Europe/Guernsey\": \"GG\",\n \"Europe/Helsinki\": \"FI\",\n \"Europe/Isle_of_Man\": \"IM\",\n \"Europe/Istanbul\": \"TR\",\n \"Europe/Jersey\": \"JE\",\n \"Europe/Kaliningrad\": \"RU\",\n \"Europe/Kiev\": \"UA\",\n \"Europe/Kirov\": \"RU\",\n \"Europe/Kyiv\": \"UA\",\n \"Europe/Lisbon\": \"PT\",\n \"Europe/Ljubljana\": \"SI\",\n \"Europe/London\": \"GB\",\n \"Europe/Luxembourg\": \"LU\",\n \"Europe/Madrid\": \"ES\",\n \"Europe/Malta\": \"MT\",\n \"Europe/Mariehamn\": \"AX\",\n \"Europe/Minsk\": \"BY\",\n \"Europe/Monaco\": \"MC\",\n \"Europe/Moscow\": \"RU\",\n \"Europe/Nicosia\": \"CY\",\n \"Europe/Oslo\": \"NO\",\n \"Europe/Paris\": \"FR\",\n \"Europe/Podgorica\": \"ME\",\n \"Europe/Prague\": \"CZ\",\n \"Europe/Riga\": \"LV\",\n \"Europe/Rome\": \"IT\",\n \"Europe/Samara\": \"RU\",\n \"Europe/San_Marino\": \"SM\",\n \"Europe/Sarajevo\": \"BA\",\n \"Europe/Saratov\": \"RU\",\n \"Europe/Simferopol\": \"RU\",\n \"Europe/Skopje\": \"MK\",\n \"Europe/Sofia\": \"BG\",\n \"Europe/Stockholm\": \"SE\",\n \"Europe/Tallinn\": \"EE\",\n \"Europe/Tirane\": \"AL\",\n \"Europe/Tiraspol\": \"MD\",\n \"Europe/Ulyanovsk\": \"RU\",\n \"Europe/Uzhgorod\": \"UA\",\n \"Europe/Vaduz\": \"LI\",\n \"Europe/Vatican\": \"VA\",\n \"Europe/Vienna\": \"AT\",\n \"Europe/Vilnius\": \"LT\",\n \"Europe/Volgograd\": \"RU\",\n \"Europe/Warsaw\": \"PL\",\n \"Europe/Zagreb\": \"HR\",\n \"Europe/Zaporozhye\": \"UA\",\n \"Europe/Zurich\": \"CH\",\n // Factory\n Factory: \"Factory\",\n // GB\n GB: \"GB\",\n \"GB-Eire\": \"GB\",\n // GMT\n GMT: \"GMT\",\n \"GMT+0\": \"GMT+0\",\n \"GMT-0\": \"GMT-0\",\n GMT0: \"GMT0\",\n Greenwich: \"Greenwich\",\n // HK\n Hongkong: \"HK\",\n // HST\n HST: \"HST\",\n // Iceland\n Iceland: \"IS\",\n // Indian\n \"Indian/Antananarivo\": \"MG\",\n \"Indian/Chagos\": \"IO\",\n \"Indian/Christmas\": \"CX\",\n \"Indian/Cocos\": \"CC\",\n \"Indian/Comoro\": \"KM\",\n \"Indian/Kerguelen\": \"TF\",\n \"Indian/Mahe\": \"SC\",\n \"Indian/Maldives\": \"MV\",\n \"Indian/Mauritius\": \"MU\",\n \"Indian/Mayotte\": \"YT\",\n \"Indian/Reunion\": \"RE\",\n // Iran\n Iran: \"IR\",\n // Israel\n Israel: \"IL\",\n // Jamaica\n Jamaica: \"JM\",\n // Japan\n Japan: \"JP\",\n // Kwajalein\n Kwajalein: \"MH\",\n // Libya\n Libya: \"LY\",\n // MET\n MET: \"MET\",\n // Mexico\n \"Mexico/BajaNorte\": \"MX\",\n \"Mexico/BajaSur\": \"MX\",\n \"Mexico/General\": \"MX\",\n // MST\n MST: \"MST\",\n MST7MDT: \"MST7MDT\",\n // Navajo\n Navajo: \"US\",\n // NZ\n NZ: \"NZ\",\n \"NZ-CHAT\": \"NZ\",\n // Pacific\n \"Pacific/Apia\": \"WS\",\n \"Pacific/Auckland\": \"NZ\",\n \"Pacific/Bougainville\": \"PG\",\n \"Pacific/Chatham\": \"NZ\",\n \"Pacific/Chuuk\": \"FM\",\n \"Pacific/Easter\": \"CL\",\n \"Pacific/Efate\": \"VU\",\n \"Pacific/Enderbury\": \"KI\",\n \"Pacific/Fakaofo\": \"TK\",\n \"Pacific/Fiji\": \"FJ\",\n \"Pacific/Funafuti\": \"TV\",\n \"Pacific/Galapagos\": \"EC\",\n \"Pacific/Gambier\": \"PF\",\n \"Pacific/Guadalcanal\": \"SB\",\n \"Pacific/Guam\": \"GU,MP\",\n \"Pacific/Honolulu\": \"US\",\n \"Pacific/Johnston\": \"UM\",\n \"Pacific/Kanton\": \"KI\",\n \"Pacific/Kiritimati\": \"KI\",\n \"Pacific/Kosrae\": \"FM\",\n \"Pacific/Kwajalein\": \"MH\",\n \"Pacific/Majuro\": \"MH\",\n \"Pacific/Marquesas\": \"PF\",\n \"Pacific/Midway\": \"UM\",\n \"Pacific/Nauru\": \"NR\",\n \"Pacific/Niue\": \"NU\",\n \"Pacific/Norfolk\": \"NF\",\n \"Pacific/Noumea\": \"NC\",\n \"Pacific/Pago_Pago\": \"AS\",\n \"Pacific/Palau\": \"PW\",\n \"Pacific/Pitcairn\": \"PN\",\n \"Pacific/Pohnpei\": \"FM\",\n \"Pacific/Ponape\": \"FM\",\n \"Pacific/Port_Moresby\": \"PG\",\n \"Pacific/Rarotonga\": \"CK\",\n \"Pacific/Saipan\": \"MP\",\n \"Pacific/Samoa\": \"AS\",\n \"Pacific/Tahiti\": \"PF\",\n \"Pacific/Tarawa\": \"KI\",\n \"Pacific/Tongatapu\": \"TO\",\n \"Pacific/Truk\": \"FM\",\n \"Pacific/Wake\": \"UM\",\n \"Pacific/Wallis\": \"WF\",\n \"Pacific/Yap\": \"FM\",\n // Poland\n Poland: \"PL\",\n // Portugal\n Portugal: \"PT\",\n // PRC\n PRC: \"CN\",\n // PST8PDT\n PST8PDT: \"PST8PDT\",\n // ROC\n ROC: \"TW\",\n // ROK\n ROK: \"KR\",\n // Singapore\n Singapore: \"SG\",\n // Turkey\n Turkey: \"TR\",\n // UCT\n UCT: \"UCT\",\n // Universal\n Universal: \"Universal\",\n // US\n \"US/Alaska\": \"US\",\n \"US/Aleutian\": \"US\",\n \"US/Arizona\": \"US\",\n \"US/Central\": \"US\",\n \"US/East-Indiana\": \"US\",\n \"US/Eastern\": \"US\",\n \"US/Hawaii\": \"US\",\n \"US/Indiana-Starke\": \"US\",\n \"US/Michigan\": \"US\",\n \"US/Mountain\": \"US\",\n \"US/Pacific\": \"US\",\n \"US/Samoa\": \"AS\",\n // UTC\n UTC: \"UTC\",\n // W-SU\n \"W-SU\": \"RU\",\n // WET\n WET: \"WET\",\n // Zulu\n Zulu: \"Zulu\",\n};\n","export enum Event {\n PAGE = 'page_hit',\n IDENTIFY = 'identify', \n CONNECT = 'connect',\n DISCONNECT = 'disconnect',\n CHAIN_CHANGED = 'chain_changed',\n SIGNATURE = 'signature',\n TRANSACTION = 'transaction',\n}\n","export * from \"./base\";\nexport * from \"./config\";\nexport * from \"./events\";\nexport * from \"./regex\";\n","export const REGEX = {\n addressRegex: /^0x[a-fA-F0-9]{40}$/,\n};\n","export * from './FormoAnalyticsProvider';\nexport * from './FormoAnalytics';\nexport * from './types';\n","import fetch from \"fetch-retry\";\n\nexport default fetch(global.fetch);\n","export * from \"./logger\";\nexport * from \"./queue\";\nexport * from \"./storage\";\nexport { default as fetch } from \"./fetch\";\n","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"trace\";\n\nexport class Logger {\n private static instance: Logger;\n private enabledLevels: Set<LogLevel>;\n private enabled: boolean;\n\n private constructor(enabled: boolean = true, enabledLevels: LogLevel[] = []) {\n this.enabled = enabled;\n this.enabledLevels = new Set(enabledLevels);\n }\n\n public static getInstance(\n enabled: boolean = false,\n enabledLevels: LogLevel[] = []\n ): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger(enabled, enabledLevels);\n }\n return Logger.instance;\n }\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n public isLoggingEnabled(): boolean {\n return this.enabled;\n }\n\n public setEnabledLevels(levels: LogLevel[]): void {\n this.enabledLevels = new Set(levels);\n }\n\n public getEnabledLevels(): LogLevel[] {\n return Array.from(this.enabledLevels);\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.enabled) return false;\n return this.enabledLevels.has(level);\n }\n\n private formatMessage(message: string): string {\n const timestamp = new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n return `[Formo Analytics][${timestamp}] ${message}`;\n }\n\n public debug(message: string, ...args: any[]): void {\n if (this.shouldLog(\"debug\")) {\n console.debug(this.formatMessage(message), ...args);\n }\n }\n\n public info(message: string, ...args: any[]): void {\n if (this.shouldLog(\"info\")) {\n console.info(this.formatMessage(message), ...args);\n }\n }\n\n public warn(message: string, ...args: any[]): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(this.formatMessage(message), ...args);\n }\n }\n\n public error(message: string, ...args: any[]): void {\n if (this.shouldLog(\"error\")) {\n console.error(this.formatMessage(message), ...args);\n }\n }\n\n public trace(message: string, ...args: any[]): void {\n if (this.shouldLog(\"trace\")) {\n console.trace(this.formatMessage(message), ...args);\n }\n }\n\n public log(message: string, ...args: any[]): void {\n this.info(message, ...args);\n }\n}\n\n// Export a default instance for easy use\nexport const logger = Logger.getInstance();\n","import isNetworkError from \"is-network-error\";\nimport { RequestEvent, RequestEventPayload } from \"../types\";\nimport {\n clampNumber,\n getActionDescriptor,\n hash,\n millisecondsToSecond,\n toDateHourMinute,\n} from \"../utils\";\nimport { logger } from \"./logger\";\nimport { EVENTS_API_REQUEST_HEADER } from \"../constants\";\nimport fetch from \"./fetch\";\nconst noop = () => {};\n\ntype QueueItem = {\n message: RequestEventPayload;\n callback: (...args: any) => any;\n};\n\ntype Options = {\n url: string;\n flushAt?: number;\n flushInterval?: number;\n host?: string;\n retryCount?: number;\n errorHandler?: any;\n maxQueueSize?: number;\n};\n\nconst DEFAULT_RETRY = 3;\nconst MAX_RETRY = 5;\nconst MIN_RETRY = 1;\n\nconst DEFAULT_FLUSH_AT = 20;\nconst MAX_FLUSH_AT = 20;\nconst MIN_FLUSH_AT = 1;\n\nconst DEFAULT_QUEUE_SIZE = 1_024 * 500; // 500kB\nconst MAX_QUEUE_SIZE = 1_024 * 500; // 500kB\nconst MIN_QUEUE_SIZE = 200; // 200 bytes\n\nconst DEFAULT_FLUSH_INTERVAL = 1_000 * 30; // 1 MINUTE\nconst MAX_FLUSH_INTERVAL = 1_000 * 300; // 5 MINUTES\nconst MIN_FLUSH_INTERVAL = 1_000 * 10; // 10 SECONDS\n\nexport class EventQueue {\n private writeKey: string;\n private url: string;\n private queue: QueueItem[] = [];\n private timer: null | NodeJS.Timeout;\n private flushAt: number;\n private flushIntervalMs: number;\n private flushed: boolean;\n private maxQueueSize: number; // min 200 bytes, max 500kB\n private errorHandler: any;\n private retryCount: number;\n private pendingFlush: Promise<any> | null;\n private payloadHashes: Set<string> = new Set();\n\n constructor(writeKey: string, options: Options) {\n options = options || {};\n\n this.queue = [];\n this.writeKey = writeKey;\n this.url = options.url;\n this.retryCount = clampNumber(\n options.retryCount || DEFAULT_RETRY,\n MAX_RETRY,\n MIN_RETRY\n );\n this.flushAt = clampNumber(\n options.flushAt || DEFAULT_FLUSH_AT,\n MAX_FLUSH_AT,\n MIN_FLUSH_AT\n );\n this.maxQueueSize = clampNumber(\n options.maxQueueSize || DEFAULT_QUEUE_SIZE,\n MAX_QUEUE_SIZE,\n MIN_QUEUE_SIZE\n );\n this.flushIntervalMs = clampNumber(\n options.flushInterval || DEFAULT_FLUSH_INTERVAL,\n MAX_FLUSH_INTERVAL,\n MIN_FLUSH_INTERVAL\n );\n this.flushed = true;\n this.errorHandler = options.errorHandler;\n this.pendingFlush = null;\n this.timer = null;\n\n this.onPageLeave(async (isAccessible: boolean) => {\n if (isAccessible === false) {\n await this.flush();\n }\n });\n }\n\n //#region Public functions\n async enqueue(message: RequestEvent, callback?: (...args: any) => void) {\n callback = callback || noop;\n\n const formattedTimestamp = toDateHourMinute(new Date(message.timestamp));\n message.timestamp = formattedTimestamp;\n\n const messageString = JSON.stringify(message);\n const hashToken = await hash(messageString);\n // check if the message already exists\n if (await this.isDuplicated(hashToken)) {\n logger.warn(\n `Event already enqueued, try again after ${millisecondsToSecond(\n this.flushIntervalMs\n )} seconds.`\n );\n return;\n }\n\n this.queue.push({ message: { ...message, id: hashToken }, callback });\n\n logger.log(\n `Event enqueued: ${getActionDescriptor(message.action, message.payload)}`\n );\n\n if (!this.flushed) {\n this.flushed = true;\n this.flush();\n return;\n }\n\n const hasReachedFlushAt = this.queue.length >= this.flushAt;\n const hasReachedQueueSize =\n this.queue.reduce((acc, item) => acc + JSON.stringify(item).length, 0) >=\n this.maxQueueSize;\n\n if (hasReachedFlushAt || hasReachedQueueSize) {\n this.flush();\n return;\n }\n\n if (this.flushIntervalMs && !this.timer) {\n this.timer = setTimeout(this.flush.bind(this), this.flushIntervalMs);\n }\n }\n\n async flush(callback?: (...args: any) => void) {\n callback = callback || noop;\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n if (!this.queue.length) {\n callback();\n return Promise.resolve();\n }\n\n try {\n if (this.pendingFlush) {\n await this.pendingFlush;\n }\n } catch (err) {\n this.pendingFlush = null;\n throw err;\n }\n\n const items = this.queue.splice(0, this.flushAt);\n this.payloadHashes.clear();\n const data = items.map((item) => item.message);\n\n const done = (err?: Error) => {\n items.forEach(({ message, callback }) => callback(err, message, data));\n callback(err, data);\n };\n\n return (this.pendingFlush = fetch(`${this.url}`, {\n headers: EVENTS_API_REQUEST_HEADER(this.writeKey),\n method: \"POST\",\n body: JSON.stringify(data),\n keepalive: true,\n retries: this.retryCount,\n retryDelay: (attempt) => Math.pow(2, attempt) * 1_000, // exponential backoff\n retryOn: (_, error) => this.isErrorRetryable(error),\n })\n .then(() => {\n done();\n return Promise.resolve(data);\n })\n .catch((err) => {\n if (typeof this.errorHandler === \"function\") {\n done(err);\n return this.errorHandler(err);\n }\n\n if (err.response) {\n const error = new Error(err.response.statusText);\n done(error);\n throw error;\n }\n\n done(err);\n throw err;\n }));\n }\n\n //#region Utility functions\n private isErrorRetryable(error: any) {\n // Retry Network Errors.\n if (isNetworkError(error)) return true;\n\n // Cannot determine if the request can be retried\n if (!error?.response) return false;\n\n // Retry Server Errors (5xx).\n if (error?.response?.status >= 500 && error?.response?.status <= 599)\n return true;\n\n // Retry if rate limited.\n if (error?.response?.status === 429) return true;\n\n return false;\n }\n\n private async isDuplicated(hashToken: string) {\n // check if exists a message with identical payload within 1 minute\n if (this.payloadHashes.has(hashToken)) return true;\n\n this.payloadHashes.add(hashToken);\n return false;\n }\n\n private onPageLeave = (callback: (isAccessible: boolean) => void) => {\n // To ensure the callback is only called once even if more than one events\n // are fired at once.\n let pageLeft = false;\n let isAccessible = false;\n\n function handleOnLeave() {\n if (pageLeft) {\n return;\n }\n\n pageLeft = true;\n\n callback(isAccessible);\n\n // Reset pageLeft on the next tick\n // to ensure callback executes for other listeners\n // when closing an inactive browser tab.\n setTimeout(() => {\n pageLeft = false;\n }, 0);\n }\n\n // Catches the unloading of the page (e.g., closing the tab or navigating away).\n // Includes user actions like clicking a link, entering a new URL,\n // refreshing the page, or closing the browser tab\n // Note that 'pagehide' is not supported in IE.\n // So, this is a fallback.\n (globalThis as typeof window).addEventListener(\"beforeunload\", () => {\n isAccessible = false;\n handleOnLeave();\n });\n\n (globalThis as typeof window).addEventListener(\"blur\", () => {\n isAccessible = true;\n handleOnLeave();\n });\n\n (globalThis as typeof window).addEventListener(\"focus\", () => {\n pageLeft = false;\n });\n\n // Catches the page being hidden, including scenarios like closing the tab.\n document.addEventListener(\"pagehide\", () => {\n isAccessible = document.visibilityState === \"hidden\";\n handleOnLeave();\n });\n\n // Catches visibility changes, such as switching tabs or minimizing the browser.\n document.addEventListener(\"visibilitychange\", () => {\n isAccessible = true;\n if (document.visibilityState === \"hidden\") {\n handleOnLeave();\n } else {\n pageLeft = false;\n }\n });\n };\n}\n","export { default as local } from \"./local\";\nexport { default as session } from \"./session\";\n","import NativeStorage from \"./native\";\n\nexport default new NativeStorage(\"localStorage\");\n","import { logger } from \"../logger\";\n\nexport class NativeStorage {\n private readonly json_prefix = \"__json=\";\n private readonly storageName: \"sessionStorage\" | \"localStorage\";\n private readonly storage: Storage;\n private readonly isBrowser: boolean;\n private memoryStorage: Record<string, string>;\n\n constructor(type: \"sessionStorage\" | \"localStorage\") {\n this.isBrowser = typeof window !== \"undefined\";\n this.memoryStorage = {};\n this.storageName = type;\n\n if (!this.isBrowser) {\n // Create an in-memory storage for SSR\n this.storage = {\n getItem: (key: string) => this.memoryStorage[key] || null,\n setItem: (key: string, value: string) => {\n this.memoryStorage[key] = value;\n },\n removeItem: (key: string) => {\n delete this.memoryStorage[key];\n },\n clear: () => {\n this.memoryStorage = {};\n },\n key: (index: number) => Object.keys(this.memoryStorage)[index] || null,\n length: 0,\n };\n return;\n }\n\n switch (type) {\n case \"sessionStorage\":\n this.storage = sessionStorage;\n break;\n case \"localStorage\":\n this.storage = localStorage;\n break;\n }\n }\n\n public set(key: string, value: any): void {\n if (typeof value === \"boolean\") value = value === true ? \"true\" : \"false\";\n if (typeof value === \"object\")\n value = this.json_prefix + JSON.stringify(value);\n this.storage.setItem(key, value);\n }\n\n public get(key: string): string | boolean | Record<any, any> | null {\n const value = this.storage.getItem(key);\n\n if (!value || typeof value !== \"string\") return null;\n if ([\"null\", \"undefined\"].some((item) => item == value)) return null;\n\n if (value.startsWith(this.json_prefix)) {\n try {\n return JSON.parse(value.slice(7));\n } catch (error) {\n logger.error(\n `[FORMO_ERROR] ${this.storageName} failed to parse JSON`,\n error\n );\n return null;\n }\n }\n\n if ([\"true\", \"false\"].some((item) => item == value)) {\n return JSON.parse(value);\n }\n\n return value;\n }\n\n public removeMatch(pattern: RegExp): void {\n for (const key in this.storage) {\n if (pattern.test(key)) {\n this.remove(key);\n }\n }\n }\n\n public remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n public clear(): void {\n this.storage.clear();\n }\n}\n\nexport default NativeStorage;\n","import NativeStorage from \"./native\";\n\nexport default new NativeStorage(\"sessionStorage\");\n","import { UUID } from \"crypto\";\n\nexport interface RequestEvent {\n anonymous_id: UUID;\n user_id: UUID | null;\n action: string;\n payload: Record<string, unknown>;\n address: string | null;\n timestamp: string;\n version: string;\n}\n\nexport type RequestEventPayload = RequestEvent & {\n id: string;\n};\n\nexport enum SignatureStatus {\n REQUESTED = \"requested\",\n REJECTED = \"rejected\",\n CONFIRMED = \"confirmed\",\n}\n\nexport enum TransactionStatus {\n STARTED = \"started\",\n REJECTED = \"rejected\",\n BROADCASTED = \"broadcasted\",\n}\n","export * from './base';\nexport * from './events';\nexport * from './provider';","import { UUID } from \"crypto\";\n\nconst toSnake = (str: string) =>\n str\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n\n// Converts object keys to snake_case, omitting keys in the omitKeys array\nexport function toSnakeCase(obj: any, omitKeys: string[] = []) {\n const convert = (data: any): any => {\n if (Array.isArray(data)) {\n return data.map(convert); // Recursively handle array elements\n } else if (data !== null && typeof data === \"object\") {\n return Object.keys(data).reduce((acc: any, key) => {\n // If the key is in omitKeys, keep it as it is\n const resultKey = omitKeys.includes(key) ? key : toSnake(key);\n acc[resultKey] = omitKeys.includes(key)\n ? data[key]\n : convert(data[key]);\n return acc;\n }, {});\n }\n return data;\n };\n\n return convert(obj);\n}\n\nexport const millisecondsToSecond = (milliseconds: number): number =>\n Math.ceil(milliseconds / 1_000);\n\nexport const toDateHourMinute = (date: Date) =>\n date.getUTCFullYear() +\n \"-\" +\n (\"0\" + (date.getUTCMonth() + 1)).slice(-2) +\n \"-\" +\n (\"0\" + date.getUTCDate()).slice(-2) +\n \" \" +\n (\"0\" + date.getUTCHours()).slice(-2) +\n \":\" +\n (\"0\" + date.getUTCMinutes()).slice(-2);\n\nexport const clampNumber = (value: number, max: number, min: number) => {\n return Math.min(Math.max(value, min), max);\n};\n\nexport const getActionDescriptor = (action: string, payload: any): string => {\n return `${action}${payload?.status ? ` ${payload?.status}` : \"\"}`;\n};\n\nexport async function hash(input: string): Promise<string> {\n const hashBuffer = await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(input)\n );\n const byteArray = new Uint8Array(hashBuffer);\n return Array.from(byteArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nexport function generateNativeUUID(): UUID {\n return crypto.randomUUID();\n}\n","export * from \"./base\";\nexport * from \"./is\";\n","import { REGEX } from \"../constants\";\n\nexport const isLocalhost = () =>\n /^localhost$|^127(?:\\.[0-9]+){0,2}\\.[0-9]+$|^(?:0*:)*?:?0*1$/.test(\n window.location.hostname\n ) || window.location.protocol === \"file:\";\n\nexport const isAddress = (address: string) => REGEX.addressRegex.test(address);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestProviders = exports.announceProvider = exports.createStore = void 0;\nvar store_js_1 = require(\"./store.js\");\nObject.defineProperty(exports, \"createStore\", { enumerable: true, get: function () { return store_js_1.createStore; } });\nvar utils_js_1 = require(\"./utils.js\");\nObject.defineProperty(exports, \"announceProvider\", { enumerable: true, get: function () { return utils_js_1.announceProvider; } });\nObject.defineProperty(exports, \"requestProviders\", { enumerable: true, get: function () { return utils_js_1.requestProviders; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStore = void 0;\nconst utils_js_1 = require(\"./utils.js\");\nfunction createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => (0, utils_js_1.requestProviders)((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\nexports.createStore = createStore;\n//# sourceMappingURL=store.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestProviders = exports.announceProvider = void 0;\nfunction announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\nexports.announceProvider = announceProvider;\nfunction requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\nexports.requestProviders = requestProviders;\n//# sourceMappingURL=utils.js.map","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Load failed', // Safari 17+\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\t// We do an extra check for Safari 17+ as it has a very generic error message.\n\t// Network errors in Safari have no stack.\n\tif (error.message === 'Load failed') {\n\t\treturn error.stack === undefined;\n\t}\n\n\treturn errorMessages.has(error.message);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(156);\n"],"names":["root","factory","exports","module","define","amd","self","isPositiveInteger","value","Number","isInteger","ArgumentError","message","this","name","fetch","defaults","undefined","retries","retryDelay","retryOn","Array","isArray","Object","assign","input","init","Promise","resolve","reject","wrappedFetch","attempt","_input","Request","clone","then","response","indexOf","status","retryOnResponse","retry","catch","error","delay","setTimeout","f","k","Symbol","for","l","m","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","Fragment","jsx","jsxs","r","t","u","v","w","x","y","z","iterator","B","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","C","D","E","context","refs","updater","F","G","isReactComponent","setState","Error","forceUpdate","H","constructor","isPureReactComponent","I","J","K","L","M","arguments","length","children","O","P","Q","replace","escape","toString","R","N","push","A","next","done","String","keys","join","S","T","_status","_result","default","U","V","transition","W","ReactCurrentDispatcher","ReactCurrentBatchConfig","X","Children","map","forEach","apply","count","toArray","only","Component","Profiler","PureComponent","StrictMode","Suspense","act","cloneElement","createContext","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","_context","createElement","createFactory","bind","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","compare","startTransition","unstable_act","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useSyncExternalStore","useTransition","version","writeKey","options","_providerListeners","anonymousId","userId","config","trackLocalhost","session","FormoAnalyticsSession","loggerConfig","logger","enabled","setEnabled","levels","setEnabledLevels","eventQueue","EventQueue","url","EVENTS_API_URL","flushAt","retryCount","maxQueueSize","flushInterval","getAnonymousId","getUserId","provider","window","ethereum","trackProvider","trackFirstPageHit","trackPageHits","analytics","FormoAnalytics","getProviders","providers","identifyAll","page","trackPageHit","reset","local","remove","LOCAL_ANONYMOUS_ID_KEY","SESSION_USER_ID_KEY","connect","chainId","address","warn","currentChainId","currentConnectedAddress","trackEvent","Event","CONNECT","disconnect","params","handleDisconnect","chain","isNaN","CHAIN_CHANGED","signature","signatureHash","SIGNATURE","transaction","data","to","transactionHash","TRANSACTION","identify","providerName","rdns","isIdentified","IDENTIFY","track","action","payload","_provider","actions","removeListener","registerAddressChangedListener","registerChainChangedListener","registerSignatureListener","registerTransactionListener","listener","onAddressChanged","args","on","onAddressDisconnected","onChainChanged","getOwnPropertyDescriptor","writable","request","method","includes","SignatureStatus","REQUESTED","buildSignatureEventPayload","CONFIRMED","rpcError","code","REJECTED","buildTransactionEventPayload","TransactionStatus","STARTED","BROADCASTED","info","addresses","onAddressConnected","getCurrentChainId","chain_id","DISCONNECT","chainIdHex","parseInt","getAddress","get","SESSION_CURRENT_URL_KEY","set","location","href","oldPushState","history","pushState","ret","dispatchEvent","oldReplaceState","replaceState","addEventListener","onLocationChange","pathname","hash","isLocalhost","PAGE","user_id","anonymous_id","timestamp","Date","toISOString","buildEventPayload","toSnakeCase","requestData","enqueue","err","_","store","createStore","subscribe","providerDetails","eip6963ProviderDetail","getAccounts","accounts","storedAnonymousId","newAnonymousId","generateNativeUUID","storedUserId","USER_API_URL","headers","EVENTS_API_REQUEST_HEADER","json","newUserId","isAddress","res","filter","getLocation","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","COUNTRY_LIST","getLanguage","navigator","languages","language","eventSpecificPayload","URL","URLSearchParams","search","userAgent","locale","referrer","document","utm_source","utm_medium","utm_campaign","utm_content","utm_term","basePayload","Buffer","from","slice","SESSION_IDENTIFIED_KEY","FormoAnalyticsContext","FormoAnalyticsProvider","disabled","InitializedAnalytics","sdk","setSdk","initializedStartedRef","initializeFormoAnalytics","sdkInstance","log","useFormoAnalytics","generateStoragePrefix","prefix","EVENTS_API_HOST","Authorization","CET","CST6CDT","Cuba","EET","Egypt","Eire","EST","EST5EDT","Factory","GB","GMT","GMT0","Greenwich","Hongkong","HST","Iceland","Iran","Israel","Jamaica","Japan","Kwajalein","Libya","MET","MST","MST7MDT","Navajo","NZ","Poland","Portugal","PRC","PST8PDT","ROC","ROK","Singapore","Turkey","UCT","Universal","UTC","WET","Zulu","REGEX","addressRegex","enabledLevels","Set","getInstance","Logger","instance","isLoggingEnabled","getEnabledLevels","shouldLog","level","has","formatMessage","toLocaleString","year","month","day","hour","minute","second","hour12","debug","console","trace","noop","queue","payloadHashes","onPageLeave","callback","pageLeft","isAccessible","handleOnLeave","globalThis","visibilityState","clampNumber","flushIntervalMs","flushed","errorHandler","pendingFlush","timer","flush","formattedTimestamp","toDateHourMinute","messageString","JSON","stringify","hashToken","isDuplicated","millisecondsToSecond","id","getActionDescriptor","hasReachedFlushAt","hasReachedQueueSize","reduce","acc","item","clearTimeout","items","splice","clear","body","keepalive","Math","pow","isErrorRetryable","statusText","add","json_prefix","isBrowser","memoryStorage","storageName","storage","sessionStorage","localStorage","getItem","setItem","removeItem","index","some","startsWith","parse","removeMatch","pattern","test","NativeStorage","obj","omitKeys","convert","toSnake","crypto","subtle","digest","TextEncoder","encode","hashBuffer","byteArray","Uint8Array","byte","padStart","randomUUID","str","toLowerCase","milliseconds","ceil","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","max","min","hostname","protocol","defineProperty","requestProviders","announceProvider","store_js_1","enumerable","utils_js_1","listeners","providerDetail","uuid","added","unwatch","_listeners","removed","destroy","findProvider","find","emitImmediately","delete","detail","event","CustomEvent","freeze","handler","removeEventListener","objectToString","isError","errorMessages","isNetworkError","stack","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","o","Function","prop","toStringTag","__webpack_exports__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.umd.min.js","mappings":"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","sources":["webpack://FormoAnalytics/webpack/universalModuleDefinition","webpack://FormoAnalytics/./node_modules/fetch-retry/dist/fetch-retry.umd.js","webpack://FormoAnalytics/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://FormoAnalytics/./node_modules/react/cjs/react.production.min.js","webpack://FormoAnalytics/./node_modules/react/index.js","webpack://FormoAnalytics/./node_modules/react/jsx-runtime.js","webpack://FormoAnalytics/./src/FormoAnalytics.ts","webpack://FormoAnalytics/./src/FormoAnalyticsProvider.tsx","webpack://FormoAnalytics/./src/constants/base.ts","webpack://FormoAnalytics/./src/constants/config.ts","webpack://FormoAnalytics/./src/constants/events.ts","webpack://FormoAnalytics/./src/constants/index.ts","webpack://FormoAnalytics/./src/constants/regex.ts","webpack://FormoAnalytics/./src/index.ts","webpack://FormoAnalytics/./src/lib/fetch.ts","webpack://FormoAnalytics/./src/lib/index.ts","webpack://FormoAnalytics/./src/lib/logger.ts","webpack://FormoAnalytics/./src/lib/queue.ts","webpack://FormoAnalytics/./src/lib/storage/index.ts","webpack://FormoAnalytics/./src/lib/storage/local.ts","webpack://FormoAnalytics/./src/lib/storage/native.ts","webpack://FormoAnalytics/./src/lib/storage/session.ts","webpack://FormoAnalytics/./src/types/events.ts","webpack://FormoAnalytics/./src/types/index.ts","webpack://FormoAnalytics/./src/utils/base.ts","webpack://FormoAnalytics/./src/utils/index.ts","webpack://FormoAnalytics/./src/utils/is.ts","webpack://FormoAnalytics/./node_modules/mipd/dist/cjs/index.js","webpack://FormoAnalytics/./node_modules/mipd/dist/cjs/store.js","webpack://FormoAnalytics/./node_modules/mipd/dist/cjs/utils.js","webpack://FormoAnalytics/./node_modules/is-network-error/index.js","webpack://FormoAnalytics/webpack/bootstrap","webpack://FormoAnalytics/webpack/runtime/define property getters","webpack://FormoAnalytics/webpack/runtime/global","webpack://FormoAnalytics/webpack/runtime/hasOwnProperty shorthand","webpack://FormoAnalytics/webpack/runtime/make namespace object","webpack://FormoAnalytics/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"FormoAnalytics\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FormoAnalytics\"] = factory();\n\telse\n\t\troot[\"FormoAnalytics\"] = factory();\n})(self, () => {\nreturn ","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.fetchRetry = factory());\n})(this, (function () { 'use strict';\n\n var fetchRetry = function (fetch, defaults) {\n defaults = defaults || {};\n if (typeof fetch !== 'function') {\n throw new ArgumentError('fetch must be a function');\n }\n\n if (typeof defaults !== 'object') {\n throw new ArgumentError('defaults must be an object');\n }\n\n if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) {\n throw new ArgumentError('retries must be a positive integer');\n }\n\n if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== 'function') {\n throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n }\n\n if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== 'function') {\n throw new ArgumentError('retryOn property expects an array or function');\n }\n\n var baseDefaults = {\n retries: 3,\n retryDelay: 1000,\n retryOn: [],\n };\n\n defaults = Object.assign(baseDefaults, defaults);\n\n return function fetchRetry(input, init) {\n var retries = defaults.retries;\n var retryDelay = defaults.retryDelay;\n var retryOn = defaults.retryOn;\n\n if (init && init.retries !== undefined) {\n if (isPositiveInteger(init.retries)) {\n retries = init.retries;\n } else {\n throw new ArgumentError('retries must be a positive integer');\n }\n }\n\n if (init && init.retryDelay !== undefined) {\n if (isPositiveInteger(init.retryDelay) || (typeof init.retryDelay === 'function')) {\n retryDelay = init.retryDelay;\n } else {\n throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n }\n }\n\n if (init && init.retryOn) {\n if (Array.isArray(init.retryOn) || (typeof init.retryOn === 'function')) {\n retryOn = init.retryOn;\n } else {\n throw new ArgumentError('retryOn property expects an array or function');\n }\n }\n\n // eslint-disable-next-line no-undef\n return new Promise(function (resolve, reject) {\n var wrappedFetch = function (attempt) {\n // As of node 18, this is no longer needed since node comes with native support for fetch:\n /* istanbul ignore next */\n var _input =\n typeof Request !== 'undefined' && input instanceof Request\n ? input.clone()\n : input;\n fetch(_input, init)\n .then(function (response) {\n if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n resolve(response);\n } else if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n return Promise.resolve(retryOn(attempt, null, response))\n .then(function (retryOnResponse) {\n if(retryOnResponse) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }).catch(reject);\n } catch (error) {\n reject(error);\n }\n } else {\n if (attempt < retries) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }\n })\n .catch(function (error) {\n if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n Promise.resolve(retryOn(attempt, error, null))\n .then(function (retryOnResponse) {\n if(retryOnResponse) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n })\n .catch(function(error) {\n reject(error);\n });\n } catch(error) {\n reject(error);\n }\n } else if (attempt < retries) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n });\n };\n\n function retry(attempt, error, response) {\n var delay = (typeof retryDelay === 'function') ?\n retryDelay(attempt, error, response) : retryDelay;\n setTimeout(function () {\n wrappedFetch(++attempt);\n }, delay);\n }\n\n wrappedFetch(0);\n });\n };\n };\n\n function isPositiveInteger(value) {\n return Number.isInteger(value) && value >= 0;\n }\n\n function ArgumentError(message) {\n this.name = 'ArgumentError';\n this.message = message;\n }\n\n return fetchRetry;\n\n}));\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createStore, EIP6963ProviderDetail } from \"mipd\";\nimport {\n LOCAL_ANONYMOUS_ID_KEY,\n COUNTRY_LIST,\n SESSION_CURRENT_URL_KEY,\n EVENTS_API_URL,\n Event,\n SESSION_USER_ID_KEY,\n} from \"./constants\";\nimport {\n ChainID,\n Address,\n EIP1193Provider,\n Options,\n Config,\n RequestArguments,\n RPCError,\n SignatureStatus,\n TransactionStatus,\n RequestEvent,\n} from \"./types\";\nimport { session, local, logger, EventQueue, Logger } from \"./lib\";\nimport {\n isLocalhost,\n isAddress,\n toSnakeCase,\n generateNativeUUID,\n} from \"./utils\";\nimport { SESSION_WALLET_DETECTED_KEY } from \"./constants\";\nimport { UUID } from \"crypto\";\n\ninterface IFormoAnalytics {\n page(): void;\n reset(): void;\n connect(params: { chainId: ChainID; address: Address }): Promise<void>;\n disconnect(params?: { chainId?: ChainID; address?: Address }): Promise<void>;\n chain(params: { chainId: ChainID; address?: Address }): Promise<void>;\n signature({\n status,\n chainId,\n address,\n message,\n signatureHash,\n }: {\n status: SignatureStatus;\n chainId?: ChainID;\n address: Address;\n message: string;\n signatureHash?: string;\n }): Promise<void>;\n transaction({\n status,\n chainId,\n address,\n data,\n to,\n value,\n transactionHash,\n }: {\n status: TransactionStatus;\n chainId: ChainID;\n address: Address;\n data?: string;\n to?: string;\n value?: string;\n transactionHash?: string;\n }): Promise<void>;\n identify(params: { address: Address }): Promise<void>;\n track(action: string, payload: Record<string, any>): Promise<void>;\n}\n\nexport class FormoAnalytics implements IFormoAnalytics {\n private _provider?: EIP1193Provider;\n private _providerListeners: Record<string, (...args: unknown[]) => void> = {};\n private session: FormoAnalyticsSession;\n private eventQueue: EventQueue;\n private anonymousId: UUID | null = null;\n private userId: string | null = null;\n\n config: Config;\n currentChainId?: ChainID;\n currentConnectedAddress?: Address;\n\n private constructor(\n public readonly writeKey: string,\n public options: Options = {}\n ) {\n this.config = {\n writeKey,\n trackLocalhost: options.trackLocalhost || false,\n };\n\n this.session = new FormoAnalyticsSession();\n\n // Initialize logger with configuration from options\n Logger.init({\n enabled: options.logger?.enabled || false,\n enabledLevels: options.logger?.levels || [],\n });\n\n this.eventQueue = new EventQueue(this.config.writeKey, {\n url: EVENTS_API_URL,\n flushAt: options.flushAt,\n retryCount: options.retryCount,\n maxQueueSize: options.maxQueueSize,\n flushInterval: options.flushInterval,\n });\n\n this.anonymousId = this.getAnonymousId();\n this.userId = session.get(SESSION_USER_ID_KEY) as string | null;\n\n // TODO: replace with eip6963\n const provider = options.provider || window?.ethereum;\n if (provider) {\n this.trackProvider(provider);\n }\n\n this.trackFirstPageHit();\n this.trackPageHits();\n }\n\n static async init(\n writeKey: string,\n options?: Options\n ): Promise<FormoAnalytics> {\n const analytics = new FormoAnalytics(writeKey, options);\n\n // Detect\n const providers = await analytics.getProviders();\n await analytics.detectWallets(providers);\n\n return analytics;\n }\n\n /*\n Public SDK functions\n */\n\n /**\n * Emits a page visit event with the current URL information, fire on page change.\n * @returns {Promise<void>}\n */\n public async page(): Promise<void> {\n await this.trackPageHit();\n }\n\n /**\n * Reset the current user session.\n * @returns {void}\n */\n public reset(): void {\n this.anonymousId = this.getAnonymousId();\n this.userId = null;\n local.remove(LOCAL_ANONYMOUS_ID_KEY);\n session.remove(SESSION_USER_ID_KEY);\n }\n\n /**\n * Emits a wallet connect event.\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @throws {Error} If chainId or address is empty\n * @returns {Promise<void>}\n */\n async connect({\n chainId,\n address,\n }: {\n chainId: ChainID;\n address: Address;\n }): Promise<void> {\n if (!chainId) {\n logger.warn(\"Connect: Chain ID cannot be empty\");\n }\n if (!address) {\n logger.warn(\"Connect: Address cannot be empty\");\n }\n\n this.currentChainId = chainId;\n this.currentConnectedAddress = address;\n\n await this.trackEvent(Event.CONNECT, {\n chainId,\n address,\n });\n }\n\n /**\n * Emits a wallet disconnect event.\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @returns {Promise<void>}\n */\n async disconnect(params?: {\n chainId?: ChainID;\n address?: Address;\n }): Promise<void> {\n const address = params?.address || this.currentConnectedAddress;\n const chainId = params?.chainId || this.currentChainId;\n\n await this.handleDisconnect(chainId, address);\n }\n\n /**\n * Emits a chain network change event.\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @throws {Error} If chainId is empty, zero, or not a valid number\n * @throws {Error} If no address is provided and no previous address is recorded\n * @returns {Promise<void>}\n */\n async chain({\n chainId,\n address,\n }: {\n chainId: ChainID;\n address?: Address;\n }): Promise<void> {\n if (!chainId || Number(chainId) === 0) {\n throw new Error(\"FormoAnalytics::chain: chainId cannot be empty or 0\");\n }\n if (isNaN(Number(chainId))) {\n throw new Error(\n \"FormoAnalytics::chain: chainId must be a valid decimal number\"\n );\n }\n if (!address && !this.currentConnectedAddress) {\n throw new Error(\n \"FormoAnalytics::chain: address was empty and no previous address has been recorded\"\n );\n }\n\n this.currentChainId = chainId;\n\n await this.trackEvent(Event.CHAIN_CHANGED, {\n chainId,\n address: address || this.currentConnectedAddress,\n });\n }\n\n /**\n * Emits a signature event.\n * @param {SignatureStatus} params.status - requested, confirmed, rejected\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @param {string} params.message\n * @param {string} params.signatureHash - only provided if status is confirmed\n * @returns {Promise<void>}\n */\n async signature({\n status,\n chainId,\n address,\n message,\n signatureHash,\n }: {\n status: SignatureStatus;\n chainId?: ChainID;\n address: Address;\n message: string;\n signatureHash?: string;\n }): Promise<void> {\n await this.trackEvent(Event.SIGNATURE, {\n status,\n chainId,\n address,\n message,\n ...(signatureHash && { signatureHash }),\n });\n }\n\n /**\n * Emits a transaction event.\n * @param {TransactionStatus} params.status - started, broadcasted, rejected\n * @param {ChainID} params.chainId\n * @param {Address} params.address\n * @param {string} params.data\n * @param {string} params.to\n * @param {string} params.value\n * @param {string} params.transactionHash - only provided if status is broadcasted\n * @returns {Promise<void>}\n */\n async transaction({\n status,\n chainId,\n address,\n data,\n to,\n value,\n transactionHash,\n }: {\n status: TransactionStatus;\n chainId: ChainID;\n address: Address;\n data?: string;\n to?: string;\n value?: string;\n transactionHash?: string;\n }): Promise<void> {\n await this.trackEvent(Event.TRANSACTION, {\n status,\n chainId,\n address,\n data,\n to,\n value,\n ...(transactionHash && { transactionHash }),\n });\n }\n\n /**\n * Emits an identify event with current wallet address.\n * @param {Address} params.address\n * @returns {Promise<void>}\n */\n public async identify({\n address,\n providerName,\n userId,\n rdns,\n }: {\n address: Address | null;\n providerName?: string;\n userId?: string;\n rdns?: string;\n }): Promise<void> {\n if (userId) this.userId = userId || null;\n await this.trackEvent(Event.IDENTIFY, {\n address,\n providerName,\n rdns,\n });\n }\n\n /**\n * Emits an identify event with current wallet address.\n * @param {Address} params.address\n * @returns {Promise<void>}\n */\n private async detectWallet({\n providerName,\n rdns,\n }: {\n providerName: string;\n rdns: string;\n }): Promise<void> {\n if (this.session.isWalletDetected(rdns))\n return logger.warn(\n `detectWallet: Wallet ${providerName} already detected in this session`\n );\n\n this.session.markWalletdetected(rdns);\n await this.trackEvent(Event.DETECT_WALLET, {\n providerName,\n rdns,\n });\n }\n\n /**\n * Emits a custom event with custom data.\n * @param {string} action\n * @param {Record<string, any>} payload\n * @returns {Promise<void>}\n */\n async track(action: string, payload: Record<string, any>): Promise<void> {\n await this.trackEvent(action, payload);\n }\n\n /*\n SDK tracking and event listener functions\n */\n\n private trackProvider(provider: EIP1193Provider): void {\n try {\n if (provider === this._provider) {\n logger.warn(\"TrackProvider: Provider already tracked.\");\n return;\n }\n\n this.currentChainId = undefined;\n this.currentConnectedAddress = undefined;\n\n if (this._provider) {\n const actions = Object.keys(this._providerListeners);\n for (const action of actions) {\n this._provider.removeListener(\n action,\n this._providerListeners[action]\n );\n delete this._providerListeners[action];\n }\n }\n\n this._provider = provider;\n\n // Register listeners for web3 provider events\n this.registerAddressChangedListener();\n this.registerChainChangedListener();\n this.registerSignatureListener();\n this.registerTransactionListener();\n } catch (error) {\n logger.error(\"Error tracking provider:\", error);\n }\n }\n\n private registerAddressChangedListener(): void {\n const listener = (...args: unknown[]) =>\n this.onAddressChanged(args[0] as string[]);\n\n this._provider?.on(\"accountsChanged\", listener);\n this._providerListeners[\"accountsChanged\"] = listener;\n\n const onAddressDisconnected = this.onAddressDisconnected.bind(this);\n this._provider?.on(\"disconnect\", onAddressDisconnected);\n this._providerListeners[\"disconnect\"] = onAddressDisconnected;\n }\n\n private registerChainChangedListener(): void {\n const listener = (...args: unknown[]) =>\n this.onChainChanged(args[0] as string);\n this.provider?.on(\"chainChanged\", listener);\n this._providerListeners[\"chainChanged\"] = listener;\n }\n\n private registerSignatureListener(): void {\n if (!this.provider) {\n logger.error(\"Provider not found for signature tracking\");\n return;\n }\n if (\n Object.getOwnPropertyDescriptor(this.provider, \"request\")?.writable ===\n false\n ) {\n logger.warn(\"Provider.request is not writable\");\n return;\n }\n\n const request = this.provider.request.bind(this.provider);\n this.provider.request = async <T>({\n method,\n params,\n }: RequestArguments): Promise<T | null | undefined> => {\n if (\n Array.isArray(params) &&\n [\"eth_signTypedData_v4\", \"personal_sign\"].includes(method)\n ) {\n // Emit signature request event\n this.signature({\n status: SignatureStatus.REQUESTED,\n ...this.buildSignatureEventPayload(method, params),\n });\n\n try {\n const response = (await request({ method, params })) as T;\n if (response) {\n // Emit signature confirmed event\n this.signature({\n status: SignatureStatus.CONFIRMED,\n ...this.buildSignatureEventPayload(method, params, response),\n });\n }\n return response;\n } catch (error) {\n const rpcError = error as RPCError;\n if (rpcError && rpcError?.code === 4001) {\n // Emit signature rejected event\n this.signature({\n status: SignatureStatus.REJECTED,\n ...this.buildSignatureEventPayload(method, params),\n });\n }\n throw error;\n }\n }\n return request({ method, params });\n };\n return;\n }\n\n private registerTransactionListener(): void {\n if (!this.provider) {\n logger.error(\"Provider not found for transaction tracking\");\n return;\n }\n if (\n Object.getOwnPropertyDescriptor(this.provider, \"request\")?.writable ===\n false\n ) {\n logger.warn(\"Provider.request is not writable\");\n return;\n }\n const request = this.provider.request.bind(this.provider);\n this.provider.request = async <T>({\n method,\n params,\n }: RequestArguments): Promise<T | null | undefined> => {\n if (\n Array.isArray(params) &&\n method === \"eth_sendTransaction\" &&\n params[0]\n ) {\n // Track transaction start\n const payload = await this.buildTransactionEventPayload(params);\n this.transaction({ status: TransactionStatus.STARTED, ...payload });\n\n try {\n // Wait for the transaction hash\n const transactionHash = (await request({ method, params })) as string;\n\n // Track transaction broadcast\n this.transaction({\n status: TransactionStatus.BROADCASTED,\n ...payload,\n transactionHash,\n });\n\n return;\n } catch (error) {\n logger.error(\"Transaction error:\", error);\n const rpcError = error as RPCError;\n if (rpcError && rpcError?.code === 4001) {\n // Emit transaction rejected event\n this.transaction({\n status: TransactionStatus.REJECTED,\n ...payload,\n });\n }\n throw error;\n }\n }\n\n return request({ method, params });\n };\n\n return;\n }\n\n private async onAddressChanged(addresses: Address[]): Promise<void> {\n if (addresses.length > 0) {\n this.onAddressConnected(addresses[0]);\n } else {\n this.onAddressDisconnected();\n }\n }\n\n private async onAddressConnected(address: Address): Promise<void> {\n if (address === this.currentConnectedAddress)\n // We have already reported this address\n return;\n\n this.currentConnectedAddress = address;\n\n this.currentChainId = await this.getCurrentChainId();\n this.connect({ chainId: this.currentChainId, address });\n }\n\n private async handleDisconnect(\n chainId?: ChainID,\n address?: Address\n ): Promise<void> {\n const payload = {\n chain_id: chainId || this.currentChainId,\n address: address || this.currentConnectedAddress,\n };\n this.currentChainId = undefined;\n this.currentConnectedAddress = undefined;\n session.remove(SESSION_USER_ID_KEY);\n\n await this.trackEvent(Event.DISCONNECT, payload);\n }\n\n private async onAddressDisconnected(): Promise<void> {\n await this.handleDisconnect(\n this.currentChainId,\n this.currentConnectedAddress\n );\n }\n\n private async onChainChanged(chainIdHex: string): Promise<void> {\n this.currentChainId = parseInt(chainIdHex);\n if (!this.currentConnectedAddress) {\n if (!this.provider) {\n logger.info(\n \"OnChainChanged: Provider not found. CHAIN_CHANGED not reported\"\n );\n return Promise.resolve();\n }\n\n const address = await this.getAddress();\n if (!address) {\n logger.info(\n \"OnChainChanged: Unable to fetch or store connected address\"\n );\n return Promise.resolve();\n }\n this.currentConnectedAddress = address;\n }\n\n // Proceed only if the address exists\n if (this.currentConnectedAddress) {\n return this.chain({\n chainId: this.currentChainId,\n address: this.currentConnectedAddress,\n });\n } else {\n logger.info(\n \"OnChainChanged: Current connected address is null despite fetch attempt\"\n );\n }\n }\n\n private async trackFirstPageHit(): Promise<void> {\n if (session.get(SESSION_CURRENT_URL_KEY) === null) {\n session.set(SESSION_CURRENT_URL_KEY, window.location.href);\n }\n\n return this.trackPageHit();\n }\n\n private async trackPageHits(): Promise<void> {\n const oldPushState = history.pushState;\n history.pushState = function pushState(...args) {\n const ret = oldPushState.apply(this, args);\n window.dispatchEvent(new window.Event(\"locationchange\"));\n return ret;\n };\n\n const oldReplaceState = history.replaceState;\n history.replaceState = function replaceState(...args) {\n const ret = oldReplaceState.apply(this, args);\n window.dispatchEvent(new window.Event(\"locationchange\"));\n return ret;\n };\n\n window.addEventListener(\"popstate\", () => this.onLocationChange());\n window.addEventListener(\"locationchange\", () => this.onLocationChange());\n }\n\n private async onLocationChange(): Promise<void> {\n const currentUrl = session.get(SESSION_CURRENT_URL_KEY);\n\n if (currentUrl !== window.location.href) {\n session.set(SESSION_CURRENT_URL_KEY, window.location.href);\n this.trackPageHit();\n }\n }\n\n private trackPageHit(): void {\n const pathname = window.location.pathname;\n const hash = window.location.hash;\n\n if (!this.config.trackLocalhost && isLocalhost()) {\n return logger.warn(\n \"Track page hit: Ignoring event because website is running locally\"\n );\n }\n\n setTimeout(async () => {\n this.trackEvent(Event.PAGE, {\n pathname,\n hash,\n });\n }, 300);\n }\n\n private async trackEvent(action: string, payload: any): Promise<void> {\n try {\n const address = await this.getAddress();\n const user_id = this.userId;\n\n if (payload?.userId) {\n delete payload.userId;\n }\n\n const requestData: RequestEvent = {\n anonymous_id: this.anonymousId as UUID,\n user_id,\n address: address?.toLowerCase() || null,\n timestamp: new Date().toISOString(),\n action,\n version: \"1\",\n payload: await this.buildEventPayload(toSnakeCase(payload)),\n };\n\n await this.eventQueue.enqueue(requestData, (err, _, data) => {\n if (err) {\n logger.error(\"Error sending events:\", err);\n } else logger.info(`Events sent successfully: ${data.length} events`);\n });\n } catch (error) {\n logger.error(\"Error tracking event:\", error);\n }\n }\n\n /*\n Utility functions\n */\n\n private async getProviders(): Promise<readonly EIP6963ProviderDetail[]> {\n const store = createStore();\n let providers = store.getProviders();\n // TODO: consider using store.subscribe to detect changes to providers list\n store.subscribe((providerDetails) => (providers = providerDetails));\n\n // Fallback to injected provider if no providers are found\n if (providers.length === 0) {\n return window?.ethereum ? [window.ethereum] : [];\n }\n return providers;\n }\n\n private async detectWallets(\n providers: readonly EIP6963ProviderDetail[]\n ): Promise<void> {\n try {\n for (const eip6963ProviderDetail of providers) {\n await this.detectWallet({\n providerName: eip6963ProviderDetail?.info.name,\n rdns: eip6963ProviderDetail?.info.rdns,\n });\n }\n } catch (err) {\n logger.error(\"Error detect all wallets:\", err);\n }\n }\n\n // TODO: Refactoring => public this function as API\n // private async identifyAll(\n // providers: readonly EIP6963ProviderDetail[]\n // ): Promise<void> {\n // try {\n // for (const eip6963ProviderDetail of providers) {\n // if (!eip6963ProviderDetail) continue;\n // const accounts = await this.getAccounts(\n // eip6963ProviderDetail?.provider\n // );\n // // Identify with accounts\n // if (accounts && accounts.length > 0) {\n // for (const address of accounts) {\n // await this.identify({\n // address,\n // providerName: eip6963ProviderDetail?.info.name,\n // rdns: eip6963ProviderDetail?.info.rdns,\n // });\n // }\n // } else {\n // // Identify without accounts\n // await this.identify({\n // address: null,\n // providerName: eip6963ProviderDetail?.info.name,\n // rdns: eip6963ProviderDetail?.info.rdns,\n // });\n // }\n // }\n // } catch (err) {\n // logger.error(\"Error identifying all:\", err);\n // }\n // }\n\n get provider(): EIP1193Provider | undefined {\n return this._provider;\n }\n\n private getAnonymousId(): UUID {\n const storedAnonymousId = local.get(LOCAL_ANONYMOUS_ID_KEY);\n if (storedAnonymousId && typeof storedAnonymousId === \"string\")\n return storedAnonymousId as UUID;\n const newAnonymousId = generateNativeUUID();\n local.set(LOCAL_ANONYMOUS_ID_KEY, newAnonymousId);\n return newAnonymousId;\n }\n\n private async getAddress(): Promise<Address | null> {\n if (this.currentConnectedAddress) return this.currentConnectedAddress;\n if (!this?.provider) {\n logger.info(\"The provider is not set\");\n return null;\n }\n\n try {\n const accounts = await this.getAccounts();\n if (accounts && accounts.length > 0) {\n if (isAddress(accounts[0])) {\n return accounts[0];\n }\n }\n } catch (err) {\n logger.error(\"Failed to fetch accounts from provider:\", err);\n return null;\n }\n return null;\n }\n\n private async getAccounts(\n provider?: EIP1193Provider\n ): Promise<Address[] | null> {\n const p = provider || this.provider;\n try {\n const res: string[] | null | undefined = await p?.request({\n method: \"eth_accounts\",\n });\n if (!res || res.length === 0) return null;\n return res.filter(isAddress);\n } catch (err) {\n if ((err as any).code !== 4001) {\n logger.error(\n \"FormoAnalytics::getAccounts: eth_accounts threw an error\",\n err\n );\n }\n return null;\n }\n }\n\n private async getCurrentChainId(): Promise<number> {\n if (!this.provider) {\n logger.error(\"Provider not set for chain ID\");\n }\n\n let chainIdHex;\n try {\n chainIdHex = await this.provider?.request<string>({\n method: \"eth_chainId\",\n });\n if (!chainIdHex) {\n logger.info(\"Chain id not found\");\n return 0;\n }\n return parseInt(chainIdHex as string, 16);\n } catch (err) {\n logger.error(\"eth_chainId threw an error:\", err);\n return 0;\n }\n }\n\n private getLocation(): string | undefined {\n try {\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (timezone in COUNTRY_LIST)\n return COUNTRY_LIST[timezone as keyof typeof COUNTRY_LIST];\n return timezone;\n } catch (error) {\n logger.error(\"Error resolving timezone:\", error);\n return \"\";\n }\n }\n\n private getLanguage(): string {\n try {\n return (\n (navigator.languages && navigator.languages.length\n ? navigator.languages[0]\n : navigator.language) || \"en\"\n );\n } catch (error) {\n logger.error(\"Error resolving language:\", error);\n return \"en\";\n }\n }\n\n // Adds browser properties to the user-supplied payload\n private async buildEventPayload(\n eventSpecificPayload: Record<string, unknown> = {}\n ): Promise<Record<string, unknown>> {\n const url = new URL(window.location.href);\n const params = new URLSearchParams(url.search);\n\n const location = this.getLocation();\n const language = this.getLanguage();\n\n // common browser properties\n return {\n \"user-agent\": window.navigator.userAgent,\n href: url.href,\n locale: language,\n location,\n referrer: document.referrer,\n utm_source: params.get(\"utm_source\")?.trim() || \"\",\n utm_medium: params.get(\"utm_medium\")?.trim() || \"\",\n utm_campaign: params.get(\"utm_campaign\")?.trim() || \"\",\n utm_content: params.get(\"utm_content\")?.trim() || \"\",\n utm_term: params.get(\"utm_term\")?.trim() || \"\",\n ref: params.get(\"ref\")?.trim() || \"\",\n ...eventSpecificPayload,\n };\n }\n\n private buildSignatureEventPayload(\n method: string,\n params: unknown[],\n response?: unknown\n ) {\n const basePayload = {\n chainId: this.currentChainId,\n address:\n method === \"personal_sign\"\n ? (params[1] as Address)\n : (params[0] as Address),\n };\n\n if (method === \"personal_sign\") {\n const message = Buffer.from(\n (params[0] as string).slice(2),\n \"hex\"\n ).toString(\"utf8\");\n return {\n ...basePayload,\n message,\n ...(response ? { signatureHash: response as string } : {}),\n };\n }\n\n return {\n ...basePayload,\n message: params[1] as string,\n ...(response ? { signatureHash: response as string } : {}),\n };\n }\n\n private async buildTransactionEventPayload(params: unknown[]) {\n const { data, from, to, value } = params[0] as {\n data: string;\n from: string;\n to: string;\n value: string;\n };\n return {\n chainId: this.currentChainId || (await this.getCurrentChainId()),\n data,\n address: from,\n to,\n value,\n };\n }\n}\n\ninterface IFormoAnalyticsSession {\n isWalletDetected(rdns: string): boolean;\n markWalletdetected(rdns: string): void;\n}\n\nclass FormoAnalyticsSession implements IFormoAnalyticsSession {\n constructor() {}\n\n public isWalletDetected(rdns: string): boolean {\n const rdnses = (session.get(SESSION_WALLET_DETECTED_KEY) as string[]) || [];\n return rdnses.includes(rdns);\n }\n\n public markWalletdetected(rdns: string): void {\n const rdnses = (session.get(SESSION_WALLET_DETECTED_KEY) as string[]) || [];\n rdnses.push(rdns);\n session.set(SESSION_WALLET_DETECTED_KEY, rdnses);\n }\n}\n","import { createContext, useContext, useEffect, useState, useRef } from \"react\";\nimport { FormoAnalytics } from \"./FormoAnalytics\";\nimport { FormoAnalyticsProviderProps } from \"./types\";\nimport { logger } from \"./lib\";\n\nexport const FormoAnalyticsContext = createContext<FormoAnalytics | undefined>(\n undefined\n);\n\nexport const FormoAnalyticsProvider = (props: FormoAnalyticsProviderProps) => {\n const { writeKey, disabled, children } = props;\n\n // Keep the app running without analytics if no Write Key is provided or disabled\n if (!writeKey) {\n logger.error(\"FormoAnalyticsProvider: No Write Key provided\");\n return children;\n }\n\n if (disabled) {\n logger.warn(\"FormoAnalytics is disabled\");\n return children;\n }\n\n return <InitializedAnalytics {...props} />;\n};\n\nconst InitializedAnalytics = ({\n writeKey,\n options,\n children,\n}: FormoAnalyticsProviderProps) => {\n const [sdk, setSdk] = useState<FormoAnalytics | undefined>();\n const initializedStartedRef = useRef(false);\n\n const initializeFormoAnalytics = async (writeKey: string, options: any) => {\n try {\n const sdkInstance = await FormoAnalytics.init(writeKey, options);\n setSdk(sdkInstance);\n logger.log(\"FormoAnalytics SDK initialized successfully\");\n } catch (error) {\n logger.error(\"Failed to initialize FormoAnalytics SDK\", error);\n }\n };\n\n useEffect(() => {\n const initialize = async () => {\n if (initializedStartedRef.current) return;\n initializedStartedRef.current = true;\n\n await initializeFormoAnalytics(writeKey!, options);\n };\n\n initialize();\n }, [writeKey, options]);\n\n return (\n <FormoAnalyticsContext.Provider value={sdk}>\n {children}\n </FormoAnalyticsContext.Provider>\n );\n};\n\nexport const useFormoAnalytics = () => {\n const context = useContext(FormoAnalyticsContext);\n\n if (!context) {\n logger.warn(\"useFormoAnalytics called without a valid context\");\n }\n\n return context; // Return undefined if SDK is not initialized, handle accordingly in consumer\n};\n","const STORAGE_PREFIX = \"formo-\";\n\nconst generateStoragePrefix = (prefix: string) => `${STORAGE_PREFIX}${prefix}`;\n\nexport const SESSION_WALLET_DETECTED_KEY = generateStoragePrefix(\n \"session-wallet-detected\"\n);\nexport const SESSION_CURRENT_URL_KEY = generateStoragePrefix(\n \"analytics-current-url\"\n);\nexport const SESSION_USER_ID_KEY = generateStoragePrefix(\"user-id\");\n\nexport const LOCAL_ANONYMOUS_ID_KEY = generateStoragePrefix(\"anonymous-id\");\n","export const EVENTS_API_HOST = \"https://events.formo.so\";\nexport const EVENTS_API_URL = `${EVENTS_API_HOST}/events`;\nexport const USER_API_URL = `${EVENTS_API_HOST}/user`;\n\nexport const EVENTS_API_REQUEST_HEADER = (writeKey: string) => ({\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${writeKey}`,\n});\n\nexport const COUNTRY_LIST = {\n // Africa\n \"Africa/Abidjan\": \"CI\",\n \"Africa/Accra\": \"GH\",\n \"Africa/Addis_Ababa\": \"ET\",\n \"Africa/Algiers\": \"DZ\",\n \"Africa/Asmara\": \"ER\",\n \"Africa/Asmera\": \"ER\",\n \"Africa/Bamako\": \"ML\",\n \"Africa/Bangui\": \"CF\",\n \"Africa/Banjul\": \"GM\",\n \"Africa/Bissau\": \"GW\",\n \"Africa/Blantyre\": \"MW\",\n \"Africa/Brazzaville\": \"CG\",\n \"Africa/Bujumbura\": \"BI\",\n \"Africa/Cairo\": \"EG\",\n \"Africa/Casablanca\": \"MA\",\n \"Africa/Ceuta\": \"ES\",\n \"Africa/Conakry\": \"GN\",\n \"Africa/Dakar\": \"SN\",\n \"Africa/Dar_es_Salaam\": \"TZ\",\n \"Africa/Djibouti\": \"DJ\",\n \"Africa/Douala\": \"CM\",\n \"Africa/El_Aaiun\": \"EH\",\n \"Africa/Freetown\": \"SL\",\n \"Africa/Gaborone\": \"BW\",\n \"Africa/Harare\": \"ZW\",\n \"Africa/Johannesburg\": \"ZA\",\n \"Africa/Juba\": \"SS\",\n \"Africa/Kampala\": \"UG\",\n \"Africa/Khartoum\": \"SD\",\n \"Africa/Kigali\": \"RW\",\n \"Africa/Kinshasa\": \"CD\",\n \"Africa/Lagos\": \"NG\",\n \"Africa/Libreville\": \"GA\",\n \"Africa/Lome\": \"TG\",\n \"Africa/Luanda\": \"AO\",\n \"Africa/Lubumbashi\": \"CD\",\n \"Africa/Lusaka\": \"ZM\",\n \"Africa/Malabo\": \"GQ\",\n \"Africa/Maputo\": \"MZ\",\n \"Africa/Maseru\": \"LS\",\n \"Africa/Mbabane\": \"SZ\",\n \"Africa/Mogadishu\": \"SO\",\n \"Africa/Monrovia\": \"LR\",\n \"Africa/Nairobi\": \"KE\",\n \"Africa/Ndjamena\": \"TD\",\n \"Africa/Niamey\": \"NE\",\n \"Africa/Nouakchott\": \"MR\",\n \"Africa/Ouagadougou\": \"BF\",\n \"Africa/Porto-Novo\": \"BJ\",\n \"Africa/Sao_Tome\": \"ST\",\n \"Africa/Timbuktu\": \"ML\",\n \"Africa/Tripoli\": \"LY\",\n \"Africa/Tunis\": \"TN\",\n \"Africa/Windhoek\": \"NA\",\n // America\n \"America/Adak\": \"US\",\n \"America/Anchorage\": \"US\",\n \"America/Anguilla\": \"AI\",\n \"America/Antigua\": \"AG\",\n \"America/Araguaina\": \"BR\",\n \"America/Argentina/Buenos_Aires\": \"AR\",\n \"America/Argentina/Catamarca\": \"AR\",\n \"America/Argentina/ComodRivadavia\": \"AR\",\n \"America/Argentina/Cordoba\": \"AR\",\n \"America/Argentina/Jujuy\": \"AR\",\n \"America/Argentina/La_Rioja\": \"AR\",\n \"America/Argentina/Mendoza\": \"AR\",\n \"America/Argentina/Rio_Gallegos\": \"AR\",\n \"America/Argentina/Salta\": \"AR\",\n \"America/Argentina/San_Juan\": \"AR\",\n \"America/Argentina/San_Luis\": \"AR\",\n \"America/Argentina/Tucuman\": \"AR\",\n \"America/Argentina/Ushuaia\": \"AR\",\n \"America/Aruba\": \"AW\",\n \"America/Asuncion\": \"PY\",\n \"America/Atikokan\": \"CA\",\n \"America/Atka\": \"US\",\n \"America/Bahia\": \"BR\",\n \"America/Bahia_Banderas\": \"MX\",\n \"America/Barbados\": \"BB\",\n \"America/Belem\": \"BR\",\n \"America/Belize\": \"BZ\",\n \"America/Blanc-Sablon\": \"CA\",\n \"America/Boa_Vista\": \"BR\",\n \"America/Bogota\": \"CO\",\n \"America/Boise\": \"US\",\n \"America/Buenos_Aires\": \"AR\",\n \"America/Cambridge_Bay\": \"CA\",\n \"America/Campo_Grande\": \"BR\",\n \"America/Cancun\": \"MX\",\n \"America/Caracas\": \"VE\",\n \"America/Catamarca\": \"AR\",\n \"America/Cayenne\": \"GF\",\n \"America/Cayman\": \"KY\",\n \"America/Chicago\": \"US\",\n \"America/Chihuahua\": \"MX\",\n \"America/Ciudad_Juarez\": \"MX\",\n \"America/Coral_Harbour\": \"CA\",\n \"America/Cordoba\": \"AR\",\n \"America/Costa_Rica\": \"CR\",\n \"America/Creston\": \"CA\",\n \"America/Cuiaba\": \"BR\",\n \"America/Curacao\": \"CW\",\n \"America/Danmarkshavn\": \"GL\",\n \"America/Dawson\": \"CA\",\n \"America/Dawson_Creek\": \"CA\",\n \"America/Denver\": \"US\",\n \"America/Detroit\": \"US\",\n \"America/Dominica\": \"DM\",\n \"America/Edmonton\": \"CA\",\n \"America/Eirunepe\": \"BR\",\n \"America/El_Salvador\": \"SV\",\n \"America/Ensenada\": \"MX\",\n \"America/Fort_Nelson\": \"CA\",\n \"America/Fort_Wayne\": \"US\",\n \"America/Fortaleza\": \"BR\",\n \"America/Glace_Bay\": \"CA\",\n \"America/Godthab\": \"GL\",\n \"America/Goose_Bay\": \"CA\",\n \"America/Grand_Turk\": \"TC\",\n \"America/Grenada\": \"GD\",\n \"America/Guadeloupe\": \"GP\",\n \"America/Guatemala\": \"GT\",\n \"America/Guayaquil\": \"EC\",\n \"America/Guyana\": \"GY\",\n \"America/Halifax\": \"CA\",\n \"America/Havana\": \"CU\",\n \"America/Hermosillo\": \"MX\",\n \"America/Indiana/Indianapoli\": \"US\",\n \"America/Indiana/Knox\": \"US\",\n \"America/Indiana/Marengo\": \"US\",\n \"America/Indiana/Petersburg\": \"US\",\n \"America/Indiana/Tell_City\": \"US\",\n \"America/Indiana/Vevay\": \"US\",\n \"America/Indiana/Vincennes\": \"US\",\n \"America/Indiana/Winamac\": \"US\",\n \"America/Indianapoli\": \"US\",\n \"America/Inuvik\": \"CA\",\n \"America/Iqaluit\": \"CA\",\n \"America/Jamaica\": \"JM\",\n \"America/Jujuy\": \"AR\",\n \"America/Juneau\": \"US\",\n \"America/Kentucky/Louisville\": \"US\",\n \"America/Kentucky/Monticello\": \"US\",\n \"America/Knox_IN\": \"US\",\n \"America/Kralendijk\": \"BQ\",\n \"America/La_Paz\": \"BO\",\n \"America/Lima\": \"PE\",\n \"America/Los_Angeles\": \"US\",\n \"America/Louisville\": \"US\",\n \"America/Lower_Princes\": \"SX\",\n \"America/Maceio\": \"BR\",\n \"America/Managua\": \"NI\",\n \"America/Manaus\": \"BR\",\n \"America/Marigot\": \"MF\",\n \"America/Martinique\": \"MQ\",\n \"America/Matamoros\": \"MX\",\n \"America/Mazatlan\": \"MX\",\n \"America/Mendoza\": \"AR\",\n \"America/Menominee\": \"US\",\n \"America/Merida\": \"MX\",\n \"America/Metlakatla\": \"US\",\n \"America/Mexico_City\": \"MX\",\n \"America/Miquelon\": \"PM\",\n \"America/Moncton\": \"CA\",\n \"America/Monterrey\": \"MX\",\n \"America/Montevideo\": \"UY\",\n \"America/Montreal\": \"CA\",\n \"America/Montserrat\": \"MS\",\n \"America/Nassau\": \"BS\",\n \"America/New_York\": \"US\",\n \"America/Nipigon\": \"CA\",\n \"America/Nome\": \"US\",\n \"America/Noronha\": \"BR\",\n \"America/North_Dakota/Beulah\": \"US\",\n \"America/North_Dakota/Center\": \"US\",\n \"America/North_Dakota/New_Salem\": \"US\",\n \"America/Nuuk\": \"GL\",\n \"America/Ojinaga\": \"MX\",\n \"America/Panama\": \"PA\",\n \"America/Pangnirtung\": \"CA\",\n \"America/Paramaribo\": \"SR\",\n \"America/Phoenix\": \"US,CA\",\n \"America/Port-au-Prince\": \"HT\",\n \"America/Port_of_Spain\": \"TT\",\n \"America/Porto_Acre\": \"BR\",\n \"America/Porto_Velho\": \"BR\",\n \"America/Puerto_Rico\": \"PR\",\n \"America/Punta_Arenas\": \"CL\",\n \"America/Rainy_River\": \"CA\",\n \"America/Rankin_Inlet\": \"CA\",\n \"America/Recife\": \"BR\",\n \"America/Regina\": \"CA\",\n \"America/Resolute\": \"CA\",\n \"America/Rio_Branco\": \"BR\",\n \"America/Rosario\": \"AR\",\n \"America/Santa_Isabel\": \"MX\",\n \"America/Santarem\": \"BR\",\n \"America/Santiago\": \"CL\",\n \"America/Santo_Domingo\": \"DO\",\n \"America/Sao_Paulo\": \"BR\",\n \"America/Scoresbysund\": \"GL\",\n \"America/Shiprock\": \"US\",\n \"America/Sitka\": \"US\",\n \"America/St_Barthelemy\": \"BL\",\n \"America/St_Johns\": \"CA\",\n \"America/St_Kitts\": \"KN\",\n \"America/St_Lucia\": \"LC\",\n \"America/St_Thomas\": \"VI\",\n \"America/St_Vincent\": \"VC\",\n \"America/Swift_Current\": \"CA\",\n \"America/Tegucigalpa\": \"HN\",\n \"America/Thule\": \"GL\",\n \"America/Thunder_Bay\": \"CA\",\n \"America/Tijuana\": \"MX\",\n \"America/Toronto\": \"CA\",\n \"America/Tortola\": \"VG\",\n \"America/Vancouver\": \"CA\",\n \"America/Virgin\": \"VI\",\n \"America/Whitehorse\": \"CA\",\n \"America/Winnipeg\": \"CA\",\n \"America/Yakutat\": \"US\",\n \"America/Yellowknife\": \"CA\",\n // Antarctica\n \"Antarctica/Casey\": \"AQ\",\n \"Antarctica/Davis\": \"AQ\",\n \"Antarctica/DumontDUrville\": \"AQ\",\n \"Antarctica/Macquarie\": \"AU\",\n \"Antarctica/Mawson\": \"AQ\",\n \"Antarctica/McMurdo\": \"AQ\",\n \"Antarctica/Palmer\": \"AQ\",\n \"Antarctica/Rothera\": \"AQ\",\n \"Antarctica/South_Pole\": \"AQ\",\n \"Antarctica/Syowa\": \"AQ\",\n \"Antarctica/Troll\": \"AQ\",\n \"Antarctica/Vostok\": \"AQ\",\n // Arctic\n \"Arctic/Longyearbyen\": \"SJ\",\n // Asia\n \"Asia/Aden\": \"YE\",\n \"Asia/Almaty\": \"KZ\",\n \"Asia/Amman\": \"JO\",\n \"Asia/Anadyr\": \"RU\",\n \"Asia/Aqtau\": \"KZ\",\n \"Asia/Aqtobe\": \"KZ\",\n \"Asia/Ashgabat\": \"TM\",\n \"Asia/Ashkhabad\": \"TM\",\n \"Asia/Atyrau\": \"KZ\",\n \"Asia/Baghdad\": \"IQ\",\n \"Asia/Bahrain\": \"BH\",\n \"Asia/Baku\": \"AZ\",\n \"Asia/Bangkok\": \"TH\",\n \"Asia/Barnaul\": \"RU\",\n \"Asia/Beirut\": \"LB\",\n \"Asia/Bishkek\": \"KG\",\n \"Asia/Brunei\": \"BN\",\n \"Asia/Calcutta\": \"IN\",\n \"Asia/Chita\": \"RU\",\n \"Asia/Choibalsan\": \"MN\",\n \"Asia/Chongqing\": \"CN\",\n \"Asia/Chungking\": \"CN\",\n \"Asia/Colombo\": \"LK\",\n \"Asia/Dacca\": \"BD\",\n \"Asia/Damascus\": \"SY\",\n \"Asia/Dhaka\": \"BD\",\n \"Asia/Dili\": \"TL\",\n \"Asia/Dubai\": \"AE\",\n \"Asia/Dushanbe\": \"TJ\",\n \"Asia/Famagusta\": \"CY\",\n \"Asia/Gaza\": \"PS\",\n \"Asia/Harbin\": \"CN\",\n \"Asia/Hebron\": \"PS\",\n \"Asia/Ho_Chi_Minh\": \"VN\",\n \"Asia/Hong_Kong\": \"HK\",\n \"Asia/Hovd\": \"MN\",\n \"Asia/Irkutsk\": \"RU\",\n \"Asia/Istanbul\": \"TR\",\n \"Asia/Jakarta\": \"ID\",\n \"Asia/Jayapura\": \"ID\",\n \"Asia/Jerusalem\": \"IL\",\n \"Asia/Kabul\": \"AF\",\n \"Asia/Kamchatka\": \"RU\",\n \"Asia/Karachi\": \"PK\",\n \"Asia/Kashgar\": \"CN\",\n \"Asia/Kathmandu\": \"NP\",\n \"Asia/Katmandu\": \"NP\",\n \"Asia/Khandyga\": \"RU\",\n \"Asia/Kolkata\": \"IN\",\n \"Asia/Krasnoyarsk\": \"RU\",\n \"Asia/Kuala_Lumpur\": \"MY\",\n \"Asia/Kuching\": \"MY\",\n \"Asia/Kuwait\": \"KW\",\n \"Asia/Macao\": \"MO\",\n \"Asia/Macau\": \"MO\",\n \"Asia/Magadan\": \"RU\",\n \"Asia/Makassar\": \"ID\",\n \"Asia/Manila\": \"PH\",\n \"Asia/Muscat\": \"OM\",\n \"Asia/Nicosia\": \"CY\",\n \"Asia/Novokuznetsk\": \"RU\",\n \"Asia/Novosibirsk\": \"RU\",\n \"Asia/Omsk\": \"RU\",\n \"Asia/Oral\": \"KZ\",\n \"Asia/Phnom_Penh\": \"KH\",\n \"Asia/Pontianak\": \"ID\",\n \"Asia/Pyongyang\": \"KP\",\n \"Asia/Qatar\": \"QA\",\n \"Asia/Qostanay\": \"KZ\",\n \"Asia/Qyzylorda\": \"KZ\",\n \"Asia/Rangoon\": \"MM\",\n \"Asia/Riyadh\": \"SA\",\n \"Asia/Saigon\": \"VN\",\n \"Asia/Sakhalin\": \"RU\",\n \"Asia/Samarkand\": \"UZ\",\n \"Asia/Seoul\": \"KR\",\n \"Asia/Shanghai\": \"CN\",\n \"Asia/Singapore\": \"SG\",\n \"Asia/Srednekolymsk\": \"RU\",\n \"Asia/Taipei\": \"TW\",\n \"Asia/Tashkent\": \"UZ\",\n \"Asia/Tbilisi\": \"GE\",\n \"Asia/Tehran\": \"IR\",\n \"Asia/Tel_Aviv\": \"IL\",\n \"Asia/Thimbu\": \"BT\",\n \"Asia/Thimphu\": \"BT\",\n \"Asia/Tokyo\": \"JP\",\n \"Asia/Tomsk\": \"RU\",\n \"Asia/Ujung_Pandang\": \"ID\",\n \"Asia/Ulaanbaatar\": \"MN\",\n \"Asia/Ulan_Bator\": \"MN\",\n \"Asia/Urumqi\": \"CN\",\n \"Asia/Ust-Nera\": \"RU\",\n \"Asia/Vientiane\": \"LA\",\n \"Asia/Vladivostok\": \"RU\",\n \"Asia/Yakutsk\": \"RU\",\n \"Asia/Yangon\": \"MM\",\n \"Asia/Yekaterinburg\": \"RU\",\n \"Asia/Yerevan\": \"AM\",\n // Atlantic\n \"Atlantic/Azores\": \"PT\",\n \"Atlantic/Bermuda\": \"BM\",\n \"Atlantic/Canary\": \"ES\",\n \"Atlantic/Cape_Verde\": \"CV\",\n \"Atlantic/Faeroe\": \"FO\",\n \"Atlantic/Faroe\": \"FO\",\n \"Atlantic/Jan_Mayen\": \"SJ\",\n \"Atlantic/Madeira\": \"PT\",\n \"Atlantic/Reykjavik\": \"IS\",\n \"Atlantic/South_Georgia\": \"GS\",\n \"Atlantic/St_Helena\": \"SH\",\n \"Atlantic/Stanley\": \"FK\",\n // Australia\n \"Australia/ACT\": \"AU\",\n \"Australia/Adelaide\": \"AU\",\n \"Australia/Brisbane\": \"AU\",\n \"Australia/Broken_Hill\": \"AU\",\n \"Australia/Canberra\": \"AU\",\n \"Australia/Currie\": \"AU\",\n \"Australia/Darwin\": \"AU\",\n \"Australia/Eucla\": \"AU\",\n \"Australia/Hobart\": \"AU\",\n \"Australia/LHI\": \"AU\",\n \"Australia/Lindeman\": \"AU\",\n \"Australia/Lord_Howe\": \"AU\",\n \"Australia/Melbourne\": \"AU\",\n \"Australia/North\": \"AU\",\n \"Australia/NSW\": \"AU\",\n \"Australia/Perth\": \"AU\",\n \"Australia/Queensland\": \"AU\",\n \"Australia/South\": \"AU\",\n \"Australia/Sydney\": \"AU\",\n \"Australia/Tasmania\": \"AU\",\n \"Australia/Victoria\": \"AU\",\n \"Australia/West\": \"AU\",\n \"Australia/Yancowinna\": \"AU\",\n // Brazil\n \"Brazil/Acre\": \"BR\",\n \"Brazil/DeNoronha\": \"BR\",\n \"Brazil/East\": \"BR\",\n \"Brazil/West\": \"BR\",\n // Canada\n \"Canada/Atlantic\": \"CA\",\n \"Canada/Central\": \"CA\",\n \"Canada/Eastern\": \"CA\",\n \"Canada/Mountain\": \"CA\",\n \"Canada/Newfoundland\": \"CA\",\n \"Canada/Pacific\": \"CA\",\n \"Canada/Saskatchewan\": \"CA\",\n \"Canada/Yukon\": \"CA\",\n // CET\n CET: \"CET\",\n // Chile\n \"Chile/Continental\": \"CL\",\n \"Chile/EasterIsland\": \"CL\",\n // CST6CDT\n CST6CDT: \"CST6CDT\",\n // Cuba\n Cuba: \"CU\",\n // EET\n EET: \"EET\",\n // Egypt\n Egypt: \"EG\",\n // Eire\n Eire: \"IE\",\n // EST\n EST: \"EST\",\n EST5EDT: \"EST5EDT\",\n \"Etc/GMT\": \"Etc/GMT\",\n \"Etc/GMT+0\": \"Etc/GMT+0\",\n \"Etc/GMT+1\": \"Etc/GMT+1\",\n \"Etc/GMT+10\": \"Etc/GMT+10\",\n \"Etc/GMT+11\": \"Etc/GMT+11\",\n \"Etc/GMT+12\": \"Etc/GMT+12\",\n \"Etc/GMT+2\": \"Etc/GMT+2\",\n \"Etc/GMT+3\": \"Etc/GMT+3\",\n \"Etc/GMT+4\": \"Etc/GMT+4\",\n \"Etc/GMT+5\": \"Etc/GMT+5\",\n \"Etc/GMT+6\": \"Etc/GMT+6\",\n \"Etc/GMT+7\": \"Etc/GMT+7\",\n \"Etc/GMT+8\": \"Etc/GMT+8\",\n \"Etc/GMT+9\": \"Etc/GMT+9\",\n \"Etc/GMT-0\": \"Etc/GMT-0\",\n \"Etc/GMT-1\": \"Etc/GMT-1\",\n \"Etc/GMT-10\": \"Etc/GMT-10\",\n \"Etc/GMT-11\": \"Etc/GMT-11\",\n \"Etc/GMT-12\": \"Etc/GMT-12\",\n \"Etc/GMT-13\": \"Etc/GMT-13\",\n \"Etc/GMT-14\": \"Etc/GMT-14\",\n \"Etc/GMT-2\": \"Etc/GMT-2\",\n \"Etc/GMT-3\": \"Etc/GMT-3\",\n \"Etc/GMT-4\": \"Etc/GMT-4\",\n \"Etc/GMT-5\": \"Etc/GMT-5\",\n \"Etc/GMT-6\": \"Etc/GMT-6\",\n \"Etc/GMT-7\": \"Etc/GMT-7\",\n \"Etc/GMT-8\": \"Etc/GMT-8\",\n \"Etc/GMT-9\": \"Etc/GMT-9\",\n \"Etc/GMT0\": \"Etc/GMT0\",\n \"Etc/Greenwich\": \"Etc/Greenwich\",\n \"Etc/UCT\": \"Etc/UCT\",\n \"Etc/UTC\": \"Etc/UTC\",\n \"Etc/Universal\": \"Etc/Universal\",\n \"Etc/Zulu\": \"Etc/Zulu\",\n // Europe\n \"Europe/Amsterdam\": \"NL\",\n \"Europe/Andorra\": \"AD\",\n \"Europe/Astrakhan\": \"RU\",\n \"Europe/Athens\": \"GR\",\n \"Europe/Belfast\": \"GB\",\n \"Europe/Belgrade\": \"RS\",\n \"Europe/Berlin\": \"DE\",\n \"Europe/Bratislava\": \"SK\",\n \"Europe/Brussels\": \"BE\",\n \"Europe/Bucharest\": \"RO\",\n \"Europe/Budapest\": \"HU\",\n \"Europe/Busingen\": \"DE\",\n \"Europe/Chisinau\": \"MD\",\n \"Europe/Copenhagen\": \"DK\",\n \"Europe/Dublin\": \"IE\",\n \"Europe/Gibraltar\": \"GI\",\n \"Europe/Guernsey\": \"GG\",\n \"Europe/Helsinki\": \"FI\",\n \"Europe/Isle_of_Man\": \"IM\",\n \"Europe/Istanbul\": \"TR\",\n \"Europe/Jersey\": \"JE\",\n \"Europe/Kaliningrad\": \"RU\",\n \"Europe/Kiev\": \"UA\",\n \"Europe/Kirov\": \"RU\",\n \"Europe/Kyiv\": \"UA\",\n \"Europe/Lisbon\": \"PT\",\n \"Europe/Ljubljana\": \"SI\",\n \"Europe/London\": \"GB\",\n \"Europe/Luxembourg\": \"LU\",\n \"Europe/Madrid\": \"ES\",\n \"Europe/Malta\": \"MT\",\n \"Europe/Mariehamn\": \"AX\",\n \"Europe/Minsk\": \"BY\",\n \"Europe/Monaco\": \"MC\",\n \"Europe/Moscow\": \"RU\",\n \"Europe/Nicosia\": \"CY\",\n \"Europe/Oslo\": \"NO\",\n \"Europe/Paris\": \"FR\",\n \"Europe/Podgorica\": \"ME\",\n \"Europe/Prague\": \"CZ\",\n \"Europe/Riga\": \"LV\",\n \"Europe/Rome\": \"IT\",\n \"Europe/Samara\": \"RU\",\n \"Europe/San_Marino\": \"SM\",\n \"Europe/Sarajevo\": \"BA\",\n \"Europe/Saratov\": \"RU\",\n \"Europe/Simferopol\": \"RU\",\n \"Europe/Skopje\": \"MK\",\n \"Europe/Sofia\": \"BG\",\n \"Europe/Stockholm\": \"SE\",\n \"Europe/Tallinn\": \"EE\",\n \"Europe/Tirane\": \"AL\",\n \"Europe/Tiraspol\": \"MD\",\n \"Europe/Ulyanovsk\": \"RU\",\n \"Europe/Uzhgorod\": \"UA\",\n \"Europe/Vaduz\": \"LI\",\n \"Europe/Vatican\": \"VA\",\n \"Europe/Vienna\": \"AT\",\n \"Europe/Vilnius\": \"LT\",\n \"Europe/Volgograd\": \"RU\",\n \"Europe/Warsaw\": \"PL\",\n \"Europe/Zagreb\": \"HR\",\n \"Europe/Zaporozhye\": \"UA\",\n \"Europe/Zurich\": \"CH\",\n // Factory\n Factory: \"Factory\",\n // GB\n GB: \"GB\",\n \"GB-Eire\": \"GB\",\n // GMT\n GMT: \"GMT\",\n \"GMT+0\": \"GMT+0\",\n \"GMT-0\": \"GMT-0\",\n GMT0: \"GMT0\",\n Greenwich: \"Greenwich\",\n // HK\n Hongkong: \"HK\",\n // HST\n HST: \"HST\",\n // Iceland\n Iceland: \"IS\",\n // Indian\n \"Indian/Antananarivo\": \"MG\",\n \"Indian/Chagos\": \"IO\",\n \"Indian/Christmas\": \"CX\",\n \"Indian/Cocos\": \"CC\",\n \"Indian/Comoro\": \"KM\",\n \"Indian/Kerguelen\": \"TF\",\n \"Indian/Mahe\": \"SC\",\n \"Indian/Maldives\": \"MV\",\n \"Indian/Mauritius\": \"MU\",\n \"Indian/Mayotte\": \"YT\",\n \"Indian/Reunion\": \"RE\",\n // Iran\n Iran: \"IR\",\n // Israel\n Israel: \"IL\",\n // Jamaica\n Jamaica: \"JM\",\n // Japan\n Japan: \"JP\",\n // Kwajalein\n Kwajalein: \"MH\",\n // Libya\n Libya: \"LY\",\n // MET\n MET: \"MET\",\n // Mexico\n \"Mexico/BajaNorte\": \"MX\",\n \"Mexico/BajaSur\": \"MX\",\n \"Mexico/General\": \"MX\",\n // MST\n MST: \"MST\",\n MST7MDT: \"MST7MDT\",\n // Navajo\n Navajo: \"US\",\n // NZ\n NZ: \"NZ\",\n \"NZ-CHAT\": \"NZ\",\n // Pacific\n \"Pacific/Apia\": \"WS\",\n \"Pacific/Auckland\": \"NZ\",\n \"Pacific/Bougainville\": \"PG\",\n \"Pacific/Chatham\": \"NZ\",\n \"Pacific/Chuuk\": \"FM\",\n \"Pacific/Easter\": \"CL\",\n \"Pacific/Efate\": \"VU\",\n \"Pacific/Enderbury\": \"KI\",\n \"Pacific/Fakaofo\": \"TK\",\n \"Pacific/Fiji\": \"FJ\",\n \"Pacific/Funafuti\": \"TV\",\n \"Pacific/Galapagos\": \"EC\",\n \"Pacific/Gambier\": \"PF\",\n \"Pacific/Guadalcanal\": \"SB\",\n \"Pacific/Guam\": \"GU,MP\",\n \"Pacific/Honolulu\": \"US\",\n \"Pacific/Johnston\": \"UM\",\n \"Pacific/Kanton\": \"KI\",\n \"Pacific/Kiritimati\": \"KI\",\n \"Pacific/Kosrae\": \"FM\",\n \"Pacific/Kwajalein\": \"MH\",\n \"Pacific/Majuro\": \"MH\",\n \"Pacific/Marquesas\": \"PF\",\n \"Pacific/Midway\": \"UM\",\n \"Pacific/Nauru\": \"NR\",\n \"Pacific/Niue\": \"NU\",\n \"Pacific/Norfolk\": \"NF\",\n \"Pacific/Noumea\": \"NC\",\n \"Pacific/Pago_Pago\": \"AS\",\n \"Pacific/Palau\": \"PW\",\n \"Pacific/Pitcairn\": \"PN\",\n \"Pacific/Pohnpei\": \"FM\",\n \"Pacific/Ponape\": \"FM\",\n \"Pacific/Port_Moresby\": \"PG\",\n \"Pacific/Rarotonga\": \"CK\",\n \"Pacific/Saipan\": \"MP\",\n \"Pacific/Samoa\": \"AS\",\n \"Pacific/Tahiti\": \"PF\",\n \"Pacific/Tarawa\": \"KI\",\n \"Pacific/Tongatapu\": \"TO\",\n \"Pacific/Truk\": \"FM\",\n \"Pacific/Wake\": \"UM\",\n \"Pacific/Wallis\": \"WF\",\n \"Pacific/Yap\": \"FM\",\n // Poland\n Poland: \"PL\",\n // Portugal\n Portugal: \"PT\",\n // PRC\n PRC: \"CN\",\n // PST8PDT\n PST8PDT: \"PST8PDT\",\n // ROC\n ROC: \"TW\",\n // ROK\n ROK: \"KR\",\n // Singapore\n Singapore: \"SG\",\n // Turkey\n Turkey: \"TR\",\n // UCT\n UCT: \"UCT\",\n // Universal\n Universal: \"Universal\",\n // US\n \"US/Alaska\": \"US\",\n \"US/Aleutian\": \"US\",\n \"US/Arizona\": \"US\",\n \"US/Central\": \"US\",\n \"US/East-Indiana\": \"US\",\n \"US/Eastern\": \"US\",\n \"US/Hawaii\": \"US\",\n \"US/Indiana-Starke\": \"US\",\n \"US/Michigan\": \"US\",\n \"US/Mountain\": \"US\",\n \"US/Pacific\": \"US\",\n \"US/Samoa\": \"AS\",\n // UTC\n UTC: \"UTC\",\n // W-SU\n \"W-SU\": \"RU\",\n // WET\n WET: \"WET\",\n // Zulu\n Zulu: \"Zulu\",\n};\n","export enum Event {\n PAGE = \"page_hit\",\n IDENTIFY = \"identify\",\n DETECT_WALLET = \"detect_wallet\",\n CONNECT = \"connect\",\n DISCONNECT = \"disconnect\",\n CHAIN_CHANGED = \"chain_changed\",\n SIGNATURE = \"signature\",\n TRANSACTION = \"transaction\",\n}\n","export * from \"./base\";\nexport * from \"./config\";\nexport * from \"./events\";\nexport * from \"./regex\";\n","export const REGEX = {\n addressRegex: /^0x[a-fA-F0-9]{40}$/,\n};\n","export * from './FormoAnalyticsProvider';\nexport * from './FormoAnalytics';\nexport * from './types';\n","import fetch from \"fetch-retry\";\n\nexport default fetch(global.fetch);\n","export * from \"./logger\";\nexport * from \"./queue\";\nexport * from \"./storage\";\nexport { default as fetch } from \"./fetch\";\n","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"trace\";\n\nexport class Logger {\n private static instance: Logger;\n private enabledLevels: Set<LogLevel>;\n private enabled: boolean;\n\n private constructor(\n enabled: boolean = false,\n enabledLevels: LogLevel[] = []\n ) {\n this.enabled = enabled;\n this.enabledLevels = new Set(enabledLevels);\n }\n\n public static init(config: {\n enabled?: boolean;\n enabledLevels?: LogLevel[];\n }): void {\n // Get or create instance\n const instance = Logger.getInstance();\n\n // Update configuration\n if (config.enabled !== undefined) {\n instance.setEnabled(config.enabled);\n }\n if (config.enabledLevels !== undefined) {\n instance.setEnabledLevels(config.enabledLevels);\n }\n }\n\n public static getInstance(config?: {\n enabled?: boolean;\n enabledLevels?: LogLevel[];\n }): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger(\n config?.enabled ?? false,\n config?.enabledLevels ?? []\n );\n }\n return Logger.instance;\n }\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n public isLoggingEnabled(): boolean {\n return this.enabled;\n }\n\n public setEnabledLevels(levels: LogLevel[]): void {\n this.enabledLevels = new Set(levels);\n }\n\n public getEnabledLevels(): LogLevel[] {\n return Array.from(this.enabledLevels);\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.enabled) return false;\n return this.enabledLevels.has(level);\n }\n\n private formatMessage(message: string): string {\n const timestamp = new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n return `[Formo Analytics][${timestamp}] ${message}`;\n }\n\n public debug(message: string, ...args: any[]): void {\n if (this.shouldLog(\"debug\")) {\n console.debug(this.formatMessage(message), ...args);\n }\n }\n\n public info(message: string, ...args: any[]): void {\n if (this.shouldLog(\"info\")) {\n console.info(this.formatMessage(message), ...args);\n }\n }\n\n public warn(message: string, ...args: any[]): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(this.formatMessage(message), ...args);\n }\n }\n\n public error(message: string, ...args: any[]): void {\n if (this.shouldLog(\"error\")) {\n console.error(this.formatMessage(message), ...args);\n }\n }\n\n public trace(message: string, ...args: any[]): void {\n if (this.shouldLog(\"trace\")) {\n console.trace(this.formatMessage(message), ...args);\n }\n }\n\n public log(message: string, ...args: any[]): void {\n this.info(message, ...args);\n }\n}\n\n// Export a default instance for easy use\nexport const logger = Logger.getInstance();\n","import isNetworkError from \"is-network-error\";\nimport { RequestEvent, RequestEventPayload } from \"../types\";\nimport {\n clampNumber,\n getActionDescriptor,\n hash,\n millisecondsToSecond,\n toDateHourMinute,\n} from \"../utils\";\nimport { logger } from \"./logger\";\nimport { EVENTS_API_REQUEST_HEADER } from \"../constants\";\nimport fetch from \"./fetch\";\nconst noop = () => {};\n\ntype QueueItem = {\n message: RequestEventPayload;\n callback: (...args: any) => any;\n};\n\ntype Options = {\n url: string;\n flushAt?: number;\n flushInterval?: number;\n host?: string;\n retryCount?: number;\n errorHandler?: any;\n maxQueueSize?: number;\n};\n\nconst DEFAULT_RETRY = 3;\nconst MAX_RETRY = 5;\nconst MIN_RETRY = 1;\n\nconst DEFAULT_FLUSH_AT = 20;\nconst MAX_FLUSH_AT = 20;\nconst MIN_FLUSH_AT = 1;\n\nconst DEFAULT_QUEUE_SIZE = 1_024 * 500; // 500kB\nconst MAX_QUEUE_SIZE = 1_024 * 500; // 500kB\nconst MIN_QUEUE_SIZE = 200; // 200 bytes\n\nconst DEFAULT_FLUSH_INTERVAL = 1_000 * 30; // 1 MINUTE\nconst MAX_FLUSH_INTERVAL = 1_000 * 300; // 5 MINUTES\nconst MIN_FLUSH_INTERVAL = 1_000 * 10; // 10 SECONDS\n\nexport class EventQueue {\n private writeKey: string;\n private url: string;\n private queue: QueueItem[] = [];\n private timer: null | NodeJS.Timeout;\n private flushAt: number;\n private flushIntervalMs: number;\n private flushed: boolean;\n private maxQueueSize: number; // min 200 bytes, max 500kB\n private errorHandler: any;\n private retryCount: number;\n private pendingFlush: Promise<any> | null;\n private payloadHashes: Set<string> = new Set();\n\n constructor(writeKey: string, options: Options) {\n options = options || {};\n\n this.queue = [];\n this.writeKey = writeKey;\n this.url = options.url;\n this.retryCount = clampNumber(\n options.retryCount || DEFAULT_RETRY,\n MAX_RETRY,\n MIN_RETRY\n );\n this.flushAt = clampNumber(\n options.flushAt || DEFAULT_FLUSH_AT,\n MAX_FLUSH_AT,\n MIN_FLUSH_AT\n );\n this.maxQueueSize = clampNumber(\n options.maxQueueSize || DEFAULT_QUEUE_SIZE,\n MAX_QUEUE_SIZE,\n MIN_QUEUE_SIZE\n );\n this.flushIntervalMs = clampNumber(\n options.flushInterval || DEFAULT_FLUSH_INTERVAL,\n MAX_FLUSH_INTERVAL,\n MIN_FLUSH_INTERVAL\n );\n this.flushed = true;\n this.errorHandler = options.errorHandler;\n this.pendingFlush = null;\n this.timer = null;\n\n this.onPageLeave(async (isAccessible: boolean) => {\n if (isAccessible === false) {\n await this.flush();\n }\n });\n }\n\n //#region Public functions\n async enqueue(event: RequestEvent, callback?: (...args: any) => void) {\n callback = callback || noop;\n\n const formattedTimestamp = toDateHourMinute(new Date(event.timestamp));\n const originTimestamp = event.timestamp;\n event.timestamp = formattedTimestamp;\n\n const eventString = JSON.stringify(event);\n const eventId = await hash(eventString);\n // check if the message already exists\n if (await this.isDuplicate(eventId)) {\n logger.warn(\n `Event already enqueued, try again after ${millisecondsToSecond(\n this.flushIntervalMs\n )} seconds.`\n );\n return;\n }\n\n this.queue.push({ message: { ...event, timestamp: originTimestamp, id: eventId }, callback });\n\n logger.log(\n `Event enqueued: ${getActionDescriptor(event.action, event.payload)}`\n );\n\n if (!this.flushed) {\n this.flushed = true;\n this.flush();\n return;\n }\n\n const hasReachedFlushAt = this.queue.length >= this.flushAt;\n const hasReachedQueueSize =\n this.queue.reduce((acc, item) => acc + JSON.stringify(item).length, 0) >=\n this.maxQueueSize;\n\n if (hasReachedFlushAt || hasReachedQueueSize) {\n this.flush();\n return;\n }\n\n if (this.flushIntervalMs && !this.timer) {\n this.timer = setTimeout(this.flush.bind(this), this.flushIntervalMs);\n }\n }\n\n async flush(callback?: (...args: any) => void) {\n callback = callback || noop;\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n if (!this.queue.length) {\n callback();\n return Promise.resolve();\n }\n\n try {\n if (this.pendingFlush) {\n await this.pendingFlush;\n }\n } catch (err) {\n this.pendingFlush = null;\n throw err;\n }\n\n const items = this.queue.splice(0, this.flushAt);\n this.payloadHashes.clear();\n const data = items.map((item) => item.message);\n\n const done = (err?: Error) => {\n items.forEach(({ message, callback }) => callback(err, message, data));\n callback(err, data);\n };\n\n return (this.pendingFlush = fetch(`${this.url}`, {\n headers: EVENTS_API_REQUEST_HEADER(this.writeKey),\n method: \"POST\",\n body: JSON.stringify(data),\n keepalive: true,\n retries: this.retryCount,\n retryDelay: (attempt) => Math.pow(2, attempt) * 1_000, // exponential backoff\n retryOn: (_, error) => this.isErrorRetryable(error),\n })\n .then(() => {\n done();\n return Promise.resolve(data);\n })\n .catch((err) => {\n if (typeof this.errorHandler === \"function\") {\n done(err);\n return this.errorHandler(err);\n }\n\n if (err.response) {\n const error = new Error(err.response.statusText);\n done(error);\n throw error;\n }\n\n done(err);\n throw err;\n }));\n }\n\n //#region Utility functions\n private isErrorRetryable(error: any) {\n // Retry Network Errors.\n if (isNetworkError(error)) return true;\n\n // Cannot determine if the request can be retried\n if (!error?.response) return false;\n\n // Retry Server Errors (5xx).\n if (error?.response?.status >= 500 && error?.response?.status <= 599)\n return true;\n\n // Retry if rate limited.\n if (error?.response?.status === 429) return true;\n\n return false;\n }\n\n private async isDuplicate(eventId: string) {\n // check if exists a message with identical payload within 1 minute\n if (this.payloadHashes.has(eventId)) return true;\n\n this.payloadHashes.add(eventId);\n return false;\n }\n\n private onPageLeave = (callback: (isAccessible: boolean) => void) => {\n // To ensure the callback is only called once even if more than one events\n // are fired at once.\n let pageLeft = false;\n let isAccessible = false;\n\n function handleOnLeave() {\n if (pageLeft) {\n return;\n }\n\n pageLeft = true;\n\n callback(isAccessible);\n\n // Reset pageLeft on the next tick\n // to ensure callback executes for other listeners\n // when closing an inactive browser tab.\n setTimeout(() => {\n pageLeft = false;\n }, 0);\n }\n\n // Catches the unloading of the page (e.g., closing the tab or navigating away).\n // Includes user actions like clicking a link, entering a new URL,\n // refreshing the page, or closing the browser tab\n // Note that 'pagehide' is not supported in IE.\n // So, this is a fallback.\n (globalThis as typeof window).addEventListener(\"beforeunload\", () => {\n isAccessible = false;\n handleOnLeave();\n });\n\n (globalThis as typeof window).addEventListener(\"blur\", () => {\n isAccessible = true;\n handleOnLeave();\n });\n\n (globalThis as typeof window).addEventListener(\"focus\", () => {\n pageLeft = false;\n });\n\n // Catches the page being hidden, including scenarios like closing the tab.\n document.addEventListener(\"pagehide\", () => {\n isAccessible = document.visibilityState === \"hidden\";\n handleOnLeave();\n });\n\n // Catches visibility changes, such as switching tabs or minimizing the browser.\n document.addEventListener(\"visibilitychange\", () => {\n isAccessible = true;\n if (document.visibilityState === \"hidden\") {\n handleOnLeave();\n } else {\n pageLeft = false;\n }\n });\n };\n}\n","export { default as local } from \"./local\";\nexport { default as session } from \"./session\";\n","import NativeStorage from \"./native\";\n\nexport default new NativeStorage(\"localStorage\");\n","import { logger } from \"../logger\";\n\nexport class NativeStorage {\n private readonly json_prefix = \"__json=\";\n private readonly storageName: \"sessionStorage\" | \"localStorage\";\n private readonly storage: Storage;\n private readonly isBrowser: boolean;\n private memoryStorage: Record<string, string>;\n\n constructor(type: \"sessionStorage\" | \"localStorage\") {\n this.isBrowser = typeof window !== \"undefined\";\n this.memoryStorage = {};\n this.storageName = type;\n\n if (!this.isBrowser) {\n // Create an in-memory storage for SSR\n this.storage = {\n getItem: (key: string) => this.memoryStorage[key] || null,\n setItem: (key: string, value: string) => {\n this.memoryStorage[key] = value;\n },\n removeItem: (key: string) => {\n delete this.memoryStorage[key];\n },\n clear: () => {\n this.memoryStorage = {};\n },\n key: (index: number) => Object.keys(this.memoryStorage)[index] || null,\n length: 0,\n };\n return;\n }\n\n switch (type) {\n case \"sessionStorage\":\n this.storage = sessionStorage;\n break;\n case \"localStorage\":\n this.storage = localStorage;\n break;\n }\n }\n\n public set(key: string, value: any): void {\n if (typeof value === \"boolean\") value = value === true ? \"true\" : \"false\";\n if (typeof value === \"object\")\n value = this.json_prefix + JSON.stringify(value);\n this.storage.setItem(key, value);\n }\n\n public get(key: string): string | boolean | Record<any, any> | null {\n const value = this.storage.getItem(key);\n\n if (!value || typeof value !== \"string\") return null;\n if ([\"null\", \"undefined\"].some((item) => item == value)) return null;\n\n if (value.startsWith(this.json_prefix)) {\n try {\n return JSON.parse(value.slice(7));\n } catch (error) {\n logger.error(\n `[FORMO_ERROR] ${this.storageName} failed to parse JSON`,\n error\n );\n return null;\n }\n }\n\n if ([\"true\", \"false\"].some((item) => item == value)) {\n return JSON.parse(value);\n }\n\n return value;\n }\n\n public removeMatch(pattern: RegExp): void {\n for (const key in this.storage) {\n if (pattern.test(key)) {\n this.remove(key);\n }\n }\n }\n\n public remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n public clear(): void {\n this.storage.clear();\n }\n}\n\nexport default NativeStorage;\n","import NativeStorage from \"./native\";\n\nexport default new NativeStorage(\"sessionStorage\");\n","import { UUID } from \"crypto\";\n\nexport interface RequestEvent {\n anonymous_id: UUID;\n user_id: string | null;\n action: string;\n payload: Record<string, unknown>;\n address: string | null;\n timestamp: string;\n version: string;\n}\n\nexport type RequestEventPayload = RequestEvent & {\n id: string;\n};\n\nexport enum SignatureStatus {\n REQUESTED = \"requested\",\n REJECTED = \"rejected\",\n CONFIRMED = \"confirmed\",\n}\n\nexport enum TransactionStatus {\n STARTED = \"started\",\n REJECTED = \"rejected\",\n BROADCASTED = \"broadcasted\",\n}\n","export * from './base';\nexport * from './events';\nexport * from './provider';","import { UUID } from \"crypto\";\n\nconst toSnake = (str: string) =>\n str\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n\n// Converts object keys to snake_case, omitting keys in the omitKeys array\nexport function toSnakeCase(obj: any, omitKeys: string[] = []) {\n const convert = (data: any): any => {\n if (Array.isArray(data)) {\n return data.map(convert); // Recursively handle array elements\n } else if (data !== null && typeof data === \"object\") {\n return Object.keys(data).reduce((acc: any, key) => {\n // If the key is in omitKeys, keep it as it is\n const resultKey = omitKeys.includes(key) ? key : toSnake(key);\n acc[resultKey] = omitKeys.includes(key)\n ? data[key]\n : convert(data[key]);\n return acc;\n }, {});\n }\n return data;\n };\n\n return convert(obj);\n}\n\nexport const millisecondsToSecond = (milliseconds: number): number =>\n Math.ceil(milliseconds / 1_000);\n\nexport const toDateHourMinute = (date: Date) =>\n date.getUTCFullYear() +\n \"-\" +\n (\"0\" + (date.getUTCMonth() + 1)).slice(-2) +\n \"-\" +\n (\"0\" + date.getUTCDate()).slice(-2) +\n \" \" +\n (\"0\" + date.getUTCHours()).slice(-2) +\n \":\" +\n (\"0\" + date.getUTCMinutes()).slice(-2);\n\nexport const clampNumber = (value: number, max: number, min: number) => {\n return Math.min(Math.max(value, min), max);\n};\n\nexport const getActionDescriptor = (action: string, payload: any): string => {\n return `${action}${payload?.status ? ` ${payload?.status}` : \"\"}`;\n};\n\nexport async function hash(input: string): Promise<string> {\n const hashBuffer = await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(input)\n );\n const byteArray = new Uint8Array(hashBuffer);\n return Array.from(byteArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nexport function generateNativeUUID(): UUID {\n return crypto.randomUUID();\n}\n","export * from \"./base\";\nexport * from \"./is\";\n","import { REGEX } from \"../constants\";\n\nexport const isLocalhost = () =>\n /^localhost$|^127(?:\\.[0-9]+){0,2}\\.[0-9]+$|^(?:0*:)*?:?0*1$/.test(\n window.location.hostname\n ) || window.location.protocol === \"file:\";\n\nexport const isAddress = (address: string) => REGEX.addressRegex.test(address);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestProviders = exports.announceProvider = exports.createStore = void 0;\nvar store_js_1 = require(\"./store.js\");\nObject.defineProperty(exports, \"createStore\", { enumerable: true, get: function () { return store_js_1.createStore; } });\nvar utils_js_1 = require(\"./utils.js\");\nObject.defineProperty(exports, \"announceProvider\", { enumerable: true, get: function () { return utils_js_1.announceProvider; } });\nObject.defineProperty(exports, \"requestProviders\", { enumerable: true, get: function () { return utils_js_1.requestProviders; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStore = void 0;\nconst utils_js_1 = require(\"./utils.js\");\nfunction createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => (0, utils_js_1.requestProviders)((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\nexports.createStore = createStore;\n//# sourceMappingURL=store.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.requestProviders = exports.announceProvider = void 0;\nfunction announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\nexports.announceProvider = announceProvider;\nfunction requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\nexports.requestProviders = requestProviders;\n//# sourceMappingURL=utils.js.map","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Load failed', // Safari 17+\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\t// We do an extra check for Safari 17+ as it has a very generic error message.\n\t// Network errors in Safari have no stack.\n\tif (error.message === 'Load failed') {\n\t\treturn error.stack === undefined;\n\t}\n\n\treturn errorMessages.has(error.message);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(156);\n"],"names":["root","factory","exports","module","define","amd","self","isPositiveInteger","value","Number","isInteger","ArgumentError","message","this","name","fetch","defaults","undefined","retries","retryDelay","retryOn","Array","isArray","Object","assign","input","init","Promise","resolve","reject","wrappedFetch","attempt","_input","Request","clone","then","response","indexOf","status","retryOnResponse","retry","catch","error","delay","setTimeout","f","k","Symbol","for","l","m","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","Fragment","jsx","jsxs","r","t","u","v","w","x","y","z","iterator","B","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","C","D","E","context","refs","updater","F","G","isReactComponent","setState","Error","forceUpdate","H","constructor","isPureReactComponent","I","J","K","L","M","arguments","length","children","O","P","Q","replace","escape","toString","R","N","push","A","next","done","String","keys","join","S","T","_status","_result","default","U","V","transition","W","ReactCurrentDispatcher","ReactCurrentBatchConfig","X","Children","map","forEach","apply","count","toArray","only","Component","Profiler","PureComponent","StrictMode","Suspense","act","cloneElement","createContext","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","_context","createElement","createFactory","bind","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","compare","startTransition","unstable_act","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useSyncExternalStore","useTransition","version","writeKey","options","_providerListeners","anonymousId","userId","config","trackLocalhost","session","FormoAnalyticsSession","Logger","enabled","logger","enabledLevels","levels","eventQueue","EventQueue","url","EVENTS_API_URL","flushAt","retryCount","maxQueueSize","flushInterval","getAnonymousId","get","SESSION_USER_ID_KEY","provider","window","ethereum","trackProvider","trackFirstPageHit","trackPageHits","analytics","FormoAnalytics","getProviders","providers","detectWallets","page","trackPageHit","reset","local","remove","LOCAL_ANONYMOUS_ID_KEY","connect","chainId","address","warn","currentChainId","currentConnectedAddress","trackEvent","Event","CONNECT","disconnect","params","handleDisconnect","chain","isNaN","CHAIN_CHANGED","signature","signatureHash","SIGNATURE","transaction","data","to","transactionHash","TRANSACTION","identify","providerName","rdns","IDENTIFY","detectWallet","isWalletDetected","markWalletdetected","DETECT_WALLET","track","action","payload","_provider","actions","removeListener","registerAddressChangedListener","registerChainChangedListener","registerSignatureListener","registerTransactionListener","listener","onAddressChanged","args","on","onAddressDisconnected","onChainChanged","getOwnPropertyDescriptor","writable","request","method","includes","SignatureStatus","REQUESTED","buildSignatureEventPayload","CONFIRMED","rpcError","code","REJECTED","buildTransactionEventPayload","TransactionStatus","STARTED","BROADCASTED","addresses","onAddressConnected","getCurrentChainId","chain_id","DISCONNECT","chainIdHex","parseInt","getAddress","info","SESSION_CURRENT_URL_KEY","set","location","href","oldPushState","history","pushState","ret","dispatchEvent","oldReplaceState","replaceState","addEventListener","onLocationChange","pathname","hash","isLocalhost","PAGE","user_id","anonymous_id","toLowerCase","timestamp","Date","toISOString","buildEventPayload","toSnakeCase","requestData","enqueue","err","_","store","createStore","subscribe","providerDetails","eip6963ProviderDetail","storedAnonymousId","newAnonymousId","generateNativeUUID","getAccounts","accounts","isAddress","res","filter","getLocation","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","COUNTRY_LIST","getLanguage","navigator","languages","language","eventSpecificPayload","URL","URLSearchParams","search","userAgent","locale","referrer","document","utm_source","trim","utm_medium","utm_campaign","utm_content","utm_term","basePayload","Buffer","from","slice","SESSION_WALLET_DETECTED_KEY","rdnses","FormoAnalyticsContext","FormoAnalyticsProvider","disabled","InitializedAnalytics","sdk","setSdk","initializedStartedRef","initializeFormoAnalytics","sdkInstance","log","useFormoAnalytics","generateStoragePrefix","prefix","EVENTS_API_HOST","USER_API_URL","EVENTS_API_REQUEST_HEADER","Authorization","CET","CST6CDT","Cuba","EET","Egypt","Eire","EST","EST5EDT","Factory","GB","GMT","GMT0","Greenwich","Hongkong","HST","Iceland","Iran","Israel","Jamaica","Japan","Kwajalein","Libya","MET","MST","MST7MDT","Navajo","NZ","Poland","Portugal","PRC","PST8PDT","ROC","ROK","Singapore","Turkey","UCT","Universal","UTC","WET","Zulu","REGEX","addressRegex","Set","instance","getInstance","setEnabled","setEnabledLevels","isLoggingEnabled","getEnabledLevels","shouldLog","level","has","formatMessage","toLocaleString","year","month","day","hour","minute","second","hour12","debug","console","trace","noop","queue","payloadHashes","onPageLeave","callback","pageLeft","isAccessible","handleOnLeave","globalThis","visibilityState","clampNumber","flushIntervalMs","flushed","errorHandler","pendingFlush","timer","flush","event","formattedTimestamp","toDateHourMinute","originTimestamp","eventString","JSON","stringify","eventId","isDuplicate","millisecondsToSecond","id","getActionDescriptor","hasReachedFlushAt","hasReachedQueueSize","reduce","acc","item","clearTimeout","items","splice","clear","headers","body","keepalive","Math","pow","isErrorRetryable","statusText","add","json_prefix","isBrowser","memoryStorage","storageName","storage","sessionStorage","localStorage","getItem","setItem","removeItem","index","some","startsWith","parse","removeMatch","pattern","test","NativeStorage","obj","omitKeys","convert","toSnake","crypto","subtle","digest","TextEncoder","encode","hashBuffer","byteArray","Uint8Array","byte","padStart","randomUUID","str","milliseconds","ceil","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","max","min","hostname","protocol","defineProperty","requestProviders","announceProvider","store_js_1","enumerable","utils_js_1","listeners","providerDetail","uuid","added","unwatch","_listeners","removed","destroy","findProvider","find","emitImmediately","delete","detail","CustomEvent","freeze","handler","removeEventListener","objectToString","isError","errorMessages","isNetworkError","stack","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","o","Function","prop","toStringTag","__webpack_exports__"],"sourceRoot":""}
|