{"_id":"@obslysdk/browser","_rev":"29-9fd9a260c41898fe3e6a2abfe02c658b","name":"@obslysdk/browser","dist-tags":{"latest":"2.4.1","next":"2.5.0-next.3"},"versions":{"2.0.0":{"name":"@obslysdk/browser","version":"2.0.0","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.0.0","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"01eec544de61b0947f335d91e601e11e4913c089","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.0.0.tgz","fileCount":5,"integrity":"sha512-jtcXd2NOwcW9MNLYOY9qn7lQxuM4v4O/V018QveIAP+U7nrHPvruisfbJREoaXTWzwWQaTkE9RcDS0Y4wQIKYQ==","signatures":[{"sig":"MEUCIQD1b6YE0k/X/ZeygJhb9yy6Uq+3c95ynfAb2f3SZPVfdQIgFGT0gBfXH5373yMTbXLlFeXFaUOxRCqIc9AX7IbigtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223949},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"2adf148e75d7743471c6262a7e47f7f5451768c9","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.0.0_1740573899933_0.913510459892726","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@obslysdk/browser","version":"2.0.1","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.0.1","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"3b756897d61fc047e8856d3eb6f52a0d4406023e","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.0.1.tgz","fileCount":5,"integrity":"sha512-qDc4A0tGXzmTJaO9GdwxfwEBpsz98uvDsBU2QH9DpfR7S7UN2q2SLWE9WC+PoZBChCCJyam8k5XuBq1ls294Mg==","signatures":[{"sig":"MEYCIQCvccJ/SpvQ6bB6TYRf3Fm4/kvxMFjQlXrjAwf3yR3PIgIhAOnpRoapVCZXKScQHUjc83SBlS4RIpV64h9EBkBtddcQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223953},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"da81a54f7cf0b5c12ba9fc627e55c5c7a5f53ea9","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.0.1_1741005859637_0.4647441331642732","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-rc1":{"name":"@obslysdk/browser","version":"2.1.0-rc1","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.1.0-rc1","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"0b41ca7186f98a56215853da94317f8fb6772b8d","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.1.0-rc1.tgz","fileCount":5,"integrity":"sha512-2ryqzz8ZfdGfi/84rkuXtdEEqcNogepFSiiFC+vefaFQry8KssntQYEy5SLHLLE0zaAuWO0g2WZXOmUrjvgH/g==","signatures":[{"sig":"MEQCIH+ZqNf5hlwlYChth9vbN4h3adDsT0VRjZ3uvpVGsMnTAiBAv+aUDdVKfOV6+gOxFtYBm+ULBoGAA0yimyB27i0ffw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226823},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"de50bc4ecc05d3b2f706674eaeffa318d254bc74","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.1.0-rc1_1741006231187_0.3938061244785678","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@obslysdk/browser","version":"2.0.2","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.0.2","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"634c357f6e64d4c9c76e5a209c07531e21aefd29","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.0.2.tgz","fileCount":5,"integrity":"sha512-jtJ3F6Z1Sz9R1wvJCxw8Jq27hziL2ioiewSNXADiOTzBGWEyNlXT9W4VbRTpSxAeat56Sf53b/oGAdFnP+JFaw==","signatures":[{"sig":"MEUCIQDq5+QZSlCxwAJLrnhRKmlkJgMpSKIpKiv9vDFh2PdNBgIge5wJ+sF35bXnntFNSc8oAXPUpZAX+Nqv0Kr0PwzG25A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223881},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"8500690b1f510500148d95bb60380ee1ecc7c61e","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.0.2_1741022877070_0.6486222080344517","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-rc2":{"name":"@obslysdk/browser","version":"2.1.0-rc2","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.1.0-rc2","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"0c21d8ca8902c45123b69b384ebbef31288c87a7","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.1.0-rc2.tgz","fileCount":5,"integrity":"sha512-B+53BgmSm8drKM7Vcqzt+CTutI2xuP7hyzJH1BOwvm1KidBF5WqGHMHvzOIIVE5yJxU90rmBxRDnkAuNn32xsQ==","signatures":[{"sig":"MEUCIAKoaBPntbSL1jFk01bhb0VLLY5ZPHsACQJQQw17ZkvcAiEA7uxG8w7vyuqRlxXlkxjx90+p/LWxGiPLaV398BSusYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226751},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"2c40c7e1b8f77fba1904e53cbd9912d5e8da0511","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.1.0-rc2_1741077093903_0.4914487134901304","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-rc.3":{"name":"@obslysdk/browser","version":"2.1.0-rc.3","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.1.0-rc.3","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"5a3653c99e0b9ac294d2efc20dd524c5f700bcb7","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.1.0-rc.3.tgz","fileCount":5,"integrity":"sha512-7siurwRmg3GTsWCiRQtP4jla+1muaEA+kh0inUF5LFKe0f0jAewmCEUQJKRsfLyfnHqrsk/rgyBe1RoiKw5CZA==","signatures":[{"sig":"MEQCIFFoIbI2Yzg7rFgTX7pq77H85bTpGLjrnFK2PLcyYBqoAiBr0DpC+Ud2TjbAgwN00NJwpRN+flES4Ju8w7gBCjiOjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228283},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"e3c0231228e93a6dda8314f94ae5038926579d41","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.1.0-rc.3_1741176245957_0.5552589532595242","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-rc.4":{"name":"@obslysdk/browser","version":"2.1.0-rc.4","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.1.0-rc.4","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"64b1d8ee238b527ff487bd139c791e7c37422581","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.1.0-rc.4.tgz","fileCount":5,"integrity":"sha512-IORrwbcxffxdNBehclsWV7iDt6HvkoYGi46WCWka28z8ndHm/JLPf6/jqPEFFKlcQbsjRUB07eno/mE/sX2oAA==","signatures":[{"sig":"MEYCIQDiVBqUB09yeo/qpCJ7U7CWgeJeyz686ZHq8u5G3YDCQwIhAMXsE6PgJVGPhtBxDyvEMWLLNLhaKprInRK/lfBX4+KC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247531},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"8c5d4848793b2b214d816742ce9c03a614b1a71c","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.0","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.11.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.1.0-rc.4_1742477625425_0.8343107153720053","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@obslysdk/browser","version":"2.0.3","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.0.3","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"7a818492ef19b13564ee6e3a090df0ccf269db26","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.0.3.tgz","fileCount":5,"integrity":"sha512-nRZdWfTGQ/L86ljpWW7UeHv1sV3Dz4yX2iQpRlwehPmMHHjQ5fUKClEBPaggxopJtvSgPF1XrHENjx+btDKIjg==","signatures":[{"sig":"MEYCIQDVB0I/uefI6HWpJCub5ur8yseHBZHpMNy140AGC6Z4rgIhAJpmVFgtvl+Bnfnhd9h30wK8A+a7SOUczbrwEFelbqHv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":492464},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"c75e3b6206d6a6e9401a26b319fdbd3c703b3170","_npmUser":{"name":"joangaga","email":"jgarcia@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.0.3_1744888552651_0.3746779285891111","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@obslysdk/browser","version":"2.0.4","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.0.4","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"e43f14c1d0f8a097ee11fd80c9f008d2fac35a85","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.0.4.tgz","fileCount":5,"integrity":"sha512-WdLnJ3SQWBeD/RZVGcD71e0y35BU2KAgIvChhfjnH8cLCKEHcc1TFXv55A7mEsroE3OWp+9Q1PgpnI3jnWt+zw==","signatures":[{"sig":"MEYCIQC7ksJrHIcIEFlyfKhLU1LwAIOCk6g2GikK0YFNW956bgIhAKM6sUCU57qTPo8bZu1dZpwuqwNv4nO5KT8HZnrP0CDS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223883},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"5fc8220376d7d032bbe396d66ff7a6c47a63a2d9","_npmUser":{"name":"joangaga","email":"jgarcia@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.0.4_1745307832917_0.44927141581474284","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@obslysdk/browser","version":"2.0.5","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.0.5","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"56b4eb4407956ad2d6a6758b950a5dfb95466697","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.0.5.tgz","fileCount":5,"integrity":"sha512-2yXaftqzadEptZ1hCYDdeHRY9v11oSbSbqI1xE/Qg82mbYoMSh4xO5jQGEQx0Tf0EIEFSlHUbwj9AsfCOnTJxg==","signatures":[{"sig":"MEQCID1JPaPMWjmCksik5NJMAxMfHZuKYsM1Dn9VXCQNTtcEAiBl+fn8YK7EJpQmGYA7XG9MwE9IssDoUTrwMc48A+WuaQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228669},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"bf7ab99a0dd2b6fdf5900ac5ed8fe1f0fcc50f1c","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.0.5_1747300178794_0.1593714627623315","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@obslysdk/browser","version":"2.1.0","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.1.0","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"40f4175e0f17fb74700ae17dcdf214c3251ff753","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.1.0.tgz","fileCount":5,"integrity":"sha512-wfDva/a34fzsd/iNpGsQhTcXybsPtISef4jusNHbW61IFA43LNzKWwsBP8yItO5kvp/IsapcqJtK1tyLba/fMw==","signatures":[{"sig":"MEUCIQDgqn3MmJ2xK2xG41l/SoeRw+NrYaSNKRlqk0rRiKQtiwIgM1r4RFjEePMoqjUcG77p3q4EUJTWSg9GnNln5rIu3mU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264251},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"0e50409f9662722d8d0db91f95839671f07f4cae","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.1.0_1749486292520_0.4107694144570819","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@obslysdk/browser","version":"2.2.0","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.2.0","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"2cfff0e35662479981118e78def78e176f5f960f","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.2.0.tgz","fileCount":5,"integrity":"sha512-d4KQ/q37S8WwwQhpPlzZpI+cQiALbIvrFJu+stsW590T19+yT0hk984YB/wLfYHxnlx01Ht0EZoHz6JmKkN59A==","signatures":[{"sig":"MEUCIQDjYXsiDcCNsaNx9ZsZh36IDc31KwAdhE1i/zGcbsSn3wIgQkimCObjTOtltyXrRKZTvdP1kEwHmNM6VCA3a9Q9bgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268117},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"6fdebe55eb2eb1ecbc8ef9e0f29d22e1cef3f393","_npmUser":{"name":"palmasi","actor":{"name":"palmasi","type":"user","email":"palmasi@sfy.com"},"email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.2.0_1751879648159_0.6323792184911996","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@obslysdk/browser","version":"2.2.1","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.2.1","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"474475b2ffdea76764e890242963c3ab15c42af2","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.2.1.tgz","fileCount":5,"integrity":"sha512-AFhp8qfQMwie9SgEQcryp60eTHhvqz11G6k/zSCapTwM/g1qeoW2TuoYTNENTTqM0rjTFBf9gue+MTXVO/0EnQ==","signatures":[{"sig":"MEUCIQDXCQHjrg2AptODPIN9ohh2zKRdKacfBEcDq9EbA1IGwwIgDv84N7oNxa00ly6dHQy4YwvrSKyevCT+AMZSZhSzTSw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268303},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"f8f57d441cf1de7e0855a47980f08ae9a85e6aa1","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.2.1_1752828819405_0.6686137930973683","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@obslysdk/browser","version":"2.2.2","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.2.2","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"fbf08e3c8ee57c2a293b948415c0277d87d512e8","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.2.2.tgz","fileCount":5,"integrity":"sha512-WUgk+dfO2atWwsac/V1nrgGJLeJPoaMay6BvLtqdlZfK9zVWO7Ff2pYU9AWxSivPWFYd3qTbv27Hs5DpYHC7ZA==","signatures":[{"sig":"MEUCIQCmz1AUUJ2FkCaa6GzR+CSg3B+cOfK3nVoMXhJ59HkhWwIgN20q9OK9ztXvuUiD/Os/Wrk1RCe7d6NPx0hY8ydwh8E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272693},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"007c5a06263082fb19937a2d6041e92b0c8ed876","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.2.2_1753869803721_0.2771510824727539","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@obslysdk/browser","version":"2.2.3","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.2.3","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"af578e1aa6739e6cf64239a648acec6a70d0122f","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.2.3.tgz","fileCount":5,"integrity":"sha512-4efM5v2Aw+obiOde0C+rlKWyML0ldwlgGJIo0Fx9gfwrpoHOP4TNpemME6++jWmaJlHn9uoj3ZZc1Ua8GbsbBg==","signatures":[{"sig":"MEYCIQDtj2/hCudfUUTqEFRrNj2Ui8msp9N2sNpZsqyzpwJt0gIhAIKx21Sjr4vTQf45wo4iSMDk4E2hFGlC87+MfcnnyOfm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272387},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"b951ed07d2c30d462d70294a0c1dc95903a75778","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.2.3_1754378245650_0.24996599244548778","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"@obslysdk/browser","version":"2.2.4","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.2.4","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"0e6816c22450c11006fae61b53e089f407d5ba9f","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.2.4.tgz","fileCount":5,"integrity":"sha512-zpf1IPNv/bD74ifFWUweoB5vgiN/mfQJ0hRey3FUjLczeq7uSE2Vm7c2B4QSUHd7JfZ/bfvjzxKWLi4KVLBQwg==","signatures":[{"sig":"MEQCIBu7Yt7oihFxEOXKFBcVynWiHmrm4d61RlGDfmZRW7fMAiAWLE5b+7L5InBmYWKGTH63c1wiq5aNQR1z7ZQF6GYTsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272953},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"e5b2c580e961e3bddb3f0a9b78aaab79ef57715f","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.2.4_1757492068967_0.3295579676743703","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@obslysdk/browser","version":"2.3.0","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.3.0","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"477039bd5e54e9f2bd7341c6d4949f27bd027907","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.3.0.tgz","fileCount":5,"integrity":"sha512-m4cHVinFwF9CdDWY8NfFHruOZbcElo2WyZXBcOMadgTHEQmYFZbHgxVAZvg7BhC09TQid9Ub7YbonH3S8Y+Hgw==","signatures":[{"sig":"MEUCIHDx9Kzn9/ItIV6NDmrmxqqFWdibnMNAOUcPyJQUmxtAAiEA5I7QljuZP3bn9hwEWeRaL7HHruIK44Lx1PhHoe9luZI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288247},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"5d7fd335af678b9281885f8a622454aadc511800","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.3.0_1763549108149_0.2741877576769849","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@obslysdk/browser","version":"2.4.0","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.4.0","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"c6b3e53a05b2b95db2585293de40a1abb5939774","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.4.0.tgz","fileCount":6,"integrity":"sha512-PhRc2jXHhdejzs8R1gPL3JO9VBoXKjyZ5WY24ZIEwWFxHBRHetVpWIh9IbHjWpknn51Zbohw+PjZnXkQx/asAA==","signatures":[{"sig":"MEQCIDptVSxIxcvJH1/pzBcyYJIOPEBkrTzD1YJANVjas3crAiAhiTwka98XmAwInyK5UOHR89d1dvSEvosWzpO/Cujt/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309342},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"3bf44e0c1f1a36683903177b1dd58643d6ef89fd","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/browser_2.4.0_1769081335690_0.5915075844027726","host":"s3://npm-registry-packages-npm-production"}},"2.5.0-next.0":{"name":"@obslysdk/browser","version":"2.5.0-next.0","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.5.0-next.0","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"5b70b223409f022db342bb7203d188c287b03e0e","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.5.0-next.0.tgz","fileCount":6,"integrity":"sha512-psMefhKRsdoZRkn00ZR+gYKOfCd9wmN91oUIUvjAdnSV/OTZZfBwfA6Wa2/aB6ccrKKfR7rQsx16szdeEgaMuQ==","signatures":[{"sig":"MEUCIQDatpRAnOB0CstdLbBR8zp+WeVETaHGUMZD4rGwcjYx5gIgGizyquqC6viSWwYd2IMGX7hSwKuqGOoP4aEnluFqKQU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327068},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"ea867cf4bfa472da1c689029fdfe48b75abe7724","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.5.0-next.0_1772452375448_0.05313583383635634","host":"s3://npm-registry-packages-npm-production"}},"2.5.0-next.1":{"name":"@obslysdk/browser","version":"2.5.0-next.1","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.5.0-next.1","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"8be6f87a8f9142fcce6568c3ef94ef2d86a286e2","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.5.0-next.1.tgz","fileCount":6,"integrity":"sha512-0+ZGluaoDBVKySkQYWxZoCZFD+mHxtP1jpX5k1X1ng8TeoUaaMROLB2Wru180V3ViQ0Easd4Yz7fmkulQVlhrw==","signatures":[{"sig":"MEUCIGDzL7R2E9C2qGzCDizcwnluyGZPuDOvbxboRtXFkTzPAiEA3Ruaz8PAdNThiW98ywTPKphGbPGve5BRhn21xB6fyp8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327060},"main":"./index.esm.js","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"gitHead":"69ce04e5f516ee6dc749eae42c078844b41710d1","_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.5.0-next.1_1772536887939_0.5964171914131742","host":"s3://npm-registry-packages-npm-production"}},"2.5.0-next.3":{"name":"@obslysdk/browser","version":"2.5.0-next.3","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","_id":"@obslysdk/browser@2.5.0-next.3","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"dist":{"shasum":"034495615b2d13e29b85b11d56e0ac88c4cbfcc5","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.5.0-next.3.tgz","fileCount":6,"integrity":"sha512-CQKuWnFCXP5MJFUReinWS/qKpORtGA7+dpge1MRuobl7If/EgF+BszHmuEb47U659B3n1MRbpib1EDNSLJNkGQ==","signatures":[{"sig":"MEUCIQCI1nPcYHMivnjtBKFAzm3qRp4F2FqTA9lCETti0pvIeAIgOLdUJJUD0y+aOk/jPMr8Vl2T1zLx/O/WBlXfZiVTor8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336208},"main":"./index.esm.js","_from":"file:installers/obslysdk-browser-2.5.0-next.3.tgz","types":"./index.d.ts","module":"./index.esm.js","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"_resolved":"/Users/paul.almasi/Documents/Work/SFY/Obsly/obsly360/obslysdk/installers/obslysdk-browser-2.5.0-next.3.tgz","_integrity":"sha512-CQKuWnFCXP5MJFUReinWS/qKpORtGA7+dpge1MRuobl7If/EgF+BszHmuEb47U659B3n1MRbpib1EDNSLJNkGQ==","_npmVersion":"10.9.2","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"nanostores":"^0.11.3"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/browser_2.5.0-next.3_1774364753545_0.5749121313331411","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"@obslysdk/browser","version":"2.4.1","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","author":{"name":"Soft For You, SL"},"license":"UNLICENSED","main":"./index.esm.js","module":"./index.esm.js","types":"./index.d.ts","browser":"./index.iife.js","exports":{".":{"types":"./index.d.ts","import":"./index.esm.js","require":"./index.iife.js"}},"dependencies":{"nanostores":"^0.11.3"},"_id":"@obslysdk/browser@2.4.1","_integrity":"sha512-wB6xzT7ngJIuUiF4FGD2jk0TlDmB1l5R0qJjSFLpBByePL+blFZRSq5iQQXEGfmB43wxMfKCriVTjB6GT8M4ng==","_resolved":"/Users/paul.almasi/Documents/Work/SFY/Obsly/obslysdk/installers/obslysdk-browser-2.4.1.tgz","_from":"file:installers/obslysdk-browser-2.4.1.tgz","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-wB6xzT7ngJIuUiF4FGD2jk0TlDmB1l5R0qJjSFLpBByePL+blFZRSq5iQQXEGfmB43wxMfKCriVTjB6GT8M4ng==","shasum":"19024c302f807057df94cabe752d302ce947f887","tarball":"https://registry.npmjs.org/@obslysdk/browser/-/browser-2.4.1.tgz","fileCount":6,"unpackedSize":310818,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFcNiFT8sOaNokxnkzcPUXo2Rc8/AQpVcximy7UQkC2PAiBlwv3Q3XxNfq7xNkRIB2zZMLnLOi+L3VE+cOSpRkFP5Q=="}]},"_npmUser":{"name":"palmasi","email":"palmasi@sfy.com"},"directories":{},"maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/browser_2.4.1_1774427936337_0.37712724300167544"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-26T12:44:59.821Z","modified":"2026-03-25T08:38:56.622Z","2.0.0":"2025-02-26T12:45:00.150Z","2.0.0-rl":"2025-02-26T13:10:14.216Z","2.0.1-rc1":"2025-03-03T10:43:50.680Z","2.0.1":"2025-03-03T12:44:19.856Z","2.1.0-rc1":"2025-03-03T12:50:31.397Z","2.0.2":"2025-03-03T17:27:57.263Z","2.1.0-rc2":"2025-03-04T08:31:34.113Z","2.1.0-rc.3":"2025-03-05T12:04:06.168Z","2.1.0-rc.4":"2025-03-20T13:33:45.747Z","2.0.3":"2025-04-17T11:15:52.861Z","2.0.4":"2025-04-22T07:43:53.108Z","2.0.5":"2025-05-15T09:09:38.969Z","2.1.0":"2025-06-09T16:24:52.735Z","2.2.0":"2025-07-07T09:14:08.335Z","2.2.1":"2025-07-18T08:53:39.585Z","2.2.2":"2025-07-30T10:03:24.007Z","2.2.3":"2025-08-05T07:17:25.821Z","2.2.4":"2025-09-10T08:14:29.145Z","2.3.0":"2025-11-19T10:45:08.392Z","2.4.0":"2026-01-22T11:28:55.844Z","2.5.0-next.0":"2026-03-02T11:52:55.617Z","2.5.0-next.1":"2026-03-03T11:21:28.098Z","2.5.0-next.2":"2026-03-23T09:50:44.116Z","2.5.0-next.3":"2026-03-24T15:05:53.699Z","2.4.1":"2026-03-25T08:38:56.493Z"},"author":{"name":"Soft For You, SL"},"license":"UNLICENSED","description":"Obsly offers an advanced observability platform for iOS, Android and Web Applications. Gain real-time insights, identify issues, and optimize your code for seamless performance.","maintainers":[{"name":"joangaga","email":"jgarcia@sfy.com"},{"name":"alexsmlm","email":"asanchez@sfy.com"},{"name":"palmasi","email":"palmasi@sfy.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://obsly.tech/\">\n    <img src=\"https://obsly.tech/wp-content/uploads/2023/03/Logo-positive.png\" alt=\"Logo\" width=\"138\" style=\"background: white; border-radius: 10px; padding: 10px;\" height=\"48\">\n  </a>\n</p>\n\n<h3 align=\"center\">\nObsly\nSDK for Javascript</h3>\n\n<p align=\"center\">\n  Optimize Your Applications with Real-time Insights<br>\n  <br>\n</p>\n<div align=\"center\">\n\n<a href=\"\">[![npm version](https://img.shields.io/npm/v/@obslysdk/browser)](https://img.shields.io/npm/v/@obslysdk/browser)\n![Coverage](https://img.shields.io/badge/coverage-92.41%25-brightgreen)</a>\n\n</div>\n<hr>\n\n# 🚀 Obsly SDK\n\n## Overview\n\nObsly offers an advanced observability platform for iOS, Android and Web Applications.\nGain real-time insights, identify issues, and optimize your code for seamless performance.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Developer Methods](#developer-methods)\n  - [Manage Sessions](#manage-sessions)\n  - [Client identification](#client-identification)\n  - [Application identification](#application-identification)\n  - [Tag](#tag)\n  - [Performance](#performance)\n  - [Metrics](#metrics)\n  - [Rage Click](#rage-click)\n  - [Application Context](#application-context)\n  - [SDK Control](#sdk-control)\n  - [Miscelaneous](#miscelaneous)\n- [Help](#getting-help)\n\n---\n\n## Installation\n\nInstalling @obslysdk/browser\n\nIf you're using a package manager, simply install @obslysdk/browser:\n\n```\nnpm install @obslysdk/browser\n```\n\nThis library includes all the essential functionalities of the SDK.\n\n### Optional Libraries for Enhanced Functionality\n\nExtend the capabilities of the Obsly SDK with these optional libraries. They provide specialized features and must be installed separately if you intend to use them.\n\n**Important:** These libraries must be imported in your application's main entry point _before_ you call the `init` method of the `@obslysdk/browser` SDK.\n\n- **`@obslysdk/screenshot`**\n\n  - **Purpose**: Enables capturing screenshots for visual feedback, rage click analysis, and attaching visual context to UI events. Refer to the [Screenshot](#screenshot) developer methods section for more details on its usage.\n  - **Installation**:\n\n    ```bash\n    npm install @obslysdk/screenshot\n    ```\n\n  - **NPM Link**: [npmjs.com/package/@obslysdk/screenshot](https://www.npmjs.com/package/@obslysdk/screenshot)\n\n- **`@obslysdk/rules`**\n\n  - **Purpose**: Allows for advanced rule-based event processing and conditional logic within the SDK.\n  - **Installation**:\n\n    ```bash\n    npm install @obslysdk/rules\n    ```\n\n  - **NPM Link**: [npmjs.com/package/@obslysdk/rules](https://www.npmjs.com/package/@obslysdk/rules)\n\n- **`@obslysdk/session-replay`**\n\n  - **Purpose**: Enables session replay capabilities to record and playback user sessions for debugging and analysis.\n  - **Installation**:\n\n    ```bash\n    npm install @obslysdk/session-replay\n    ```\n\n  - **NPM Link**: [npmjs.com/package/@obslysdk/session-replay](https://www.npmjs.com/package/@obslysdk/session-replay)\n\n- **`@obslysdk/devtools`**\n\n  - **Purpose**: Provides a set of tools for debugging and analyzing the application during development.\n  - **Installation**:\n\n    ```bash\n    npm install --save-dev @obslysdk/devtools\n    ```\n\n  - **Usage Note**: To avoid including devtools in your production bundle, we recommend using a [dynamic import](#development-devtools-pattern).\n  - **NPM Link**: [npmjs.com/package/@obslysdk/devtools](https://www.npmjs.com/package/@obslysdk/devtools)\n\n### Important note about Devtools\n\n`@obslysdk/devtools` is a **development-only side-effect module**. When it is loaded it registers a global `window.ObslySDKDevtools`.\n\nThe `@obslysdk/browser` SDK will **auto-start Devtools** during `init()` if:\n\n- You set `config.devtools.enable: true`, and\n- The devtools module has been loaded (so the global exists).\n\nThat’s why we recommend dynamically importing Devtools **before** calling `init()` in development.\n\n## Initialization\n\nThe SDK is initialized via the init function. There are two options to initialize the package, depending the context from where are you using the library.\n\n### Pure Javascript\n\nHere is an example of how it should be started.\nThis import allows the SDK to be executed right away the page renders. But it needs to extract \"main.bundle.js\" from the npm package:\n\n### index.html\n\n```html\n<!-- Import the SDK (from npm package, cdn or local file) -->\n<script src=\"browser.iife.js\"></script>\n\n<!-- Other optional libraries (These aren't included in the SDK package and need to be installed separately) -->\n<!-- <script src=\"screenshot.iife.js\"></script> -->\n<!-- <script src=\"rules.iife.js\"></script> -->\n<!-- <script src=\"devtools.iife.js\"></script> -->\n\n<!-- Initialize the SDK -->\n<script>\n  window.onload = () => {\n    ObslySDK.init({\n      ObslyKey: 'ObslyKey',\n      instanceURL: 'https://api-url'\n    })\n  }\n</script>\n```\n\n## React\n\nTo initialize the SDK in a React application, we recommend the following approach:\n\n### Standard Initialization\n\nIf you don't need the devtools pattern, you can initialize the SDK like this:\n\nobslysdk-init.ts\n\n```typescript\nimport { init } from '@obslysdk/browser'\n\n// Other optional libraries (These aren't included in the SDK package and need to be installed separately)\n// import \"@obslysdk/screenshot\"\n// import \"@obslysdk/rules\"\n\n// Initialize the SDK\ninit({\n  ObslyKey: 'ObslyKey',\n  instanceURL: 'https://api-url'\n  // ... other parameters\n})\n```\n\nFinally, import the SDK initialization in your main entry point:\n\nmain.tsx/jsx\n\n```typescript\nimport './obslysdk-init' // SDK initialization\nimport React from 'react'\n// ... rest of imports\n```\n\n### Development Devtools Pattern\n\nTo ensure `@obslysdk/devtools` is not bundled in production, use a dynamic import and keep a single `init()` call:\n\nobslysdk-init.ts\n\n```typescript\nimport { init } from '@obslysdk/browser'\n\n// Other optional libraries (These aren't included in the SDK package and need to be installed separately)\n// import \"@obslysdk/screenshot\"\n// import \"@obslysdk/rules\"\n\nconst isDev = import.meta.env.DEV // Vite\n// const isDev = process.env.NODE_ENV === 'development'; // Webpack\n\nexport async function initObslySDK() {\n  if (isDev) {\n    // Dev-only: keeps Devtools out of production bundles\n    await import('@obslysdk/devtools')\n  }\n\n  await init({\n    ObslyKey: 'ObslyKey',\n    instanceURL: 'https://api-url',\n    config: {\n      devtools: { enable: isDev }\n    }\n  })\n}\n```\n\nThen, from your app entrypoint:\n\nmain.tsx/jsx\n\n```typescript\nimport React from 'react'\nimport { initObslySDK } from './obslysdk-init'\n\ninitObslySDK()\n// ... render your app\n```\n\n---\n\n## Configuration\n\n### SDK parameters\n\nThe SDK initialization method accepts various parameters to customize its behavior according to your application's needs. Below is a detailed description of each parameter:\n\n| Parameter         | Description                                                                               | Required | Default value | Type      | Example                |\n| ----------------- | ----------------------------------------------------------------------------------------- | -------- | ------------- | --------- | ---------------------- |\n| `ObslyKey`        | Authorization Api Key                                                                     | Yes      | N/A           | `string`  | `\"your-api-key\"`       |\n| `instanceURL`     | Api server URL                                                                            | Yes      | N/A           | `string`  | `\"https://api.url\"`    |\n| `remoteConfigURL` | Remote config server URL                                                                  | No       | N/A           | `string`  | `\"https://config.url\"` |\n| `proEnv`          | Production environment                                                                    | No       | `true`        | `boolean` | `false`                |\n| `appVersion`      | Version of the app                                                                        | No       | `undefined`   | `string`  | `\"1.0.0\"`              |\n| `appName`         | Name of the App                                                                           | No       | `undefined`   | `string`  | `\"MyApp\"`              |\n| `logLevel`        | SDK console log level                                                                     | No       | `\"error\"`     | `string`  | `\"warn\"`               |\n| `config`          | Custom configuration object. [See details](#config-structure)                             | No       | `null`        | `object`  | See details            |\n| `debugMode`       | Enable / Disable debug mode                                                               | No       | `false`       | `boolean` | `true`                 |\n| `sessionID`       | Set a custom Session ID on init                                                           | No       | N/A           | `string`  | `custom_session_id`    |\n| `rateLimits`      | Configuration for rate limiting event capturing. [See details](#rate-limit-configuration) | No       | `{}`          | `object`  | See details            |\n\n### Config structure\n\n| Parameter                     | Type                                   | Default Value | Description                                                                                                                                                                                                                                |\n| ----------------------------- | -------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `enableCrashes`               | `Boolean`                              | `true`        | Activate or deactivate Crash events.                                                                                                                                                                                                       |\n| `enableLifeCycleLog`          | `Boolean`                              | `true`        | Activate or deactivate Life Cycle events.                                                                                                                                                                                                  |\n| `enableRequestLog`            | `Boolean`                              | `true`        | Activate or deactivate Request events.                                                                                                                                                                                                     |\n| `enableTagger`                | `Boolean`                              | `true`        | Activate or deactivate Tag events.                                                                                                                                                                                                         |\n| `enablePerformance`           | `Boolean`                              | `true`        | Activate or deactivate Performance events.                                                                                                                                                                                                 |\n| `enableUI`                    | `Boolean`                              | `true`        | Activate or deactivate UI events.                                                                                                                                                                                                          |\n| `requestBlacklist`            | `Array[String]`                        | `null`        | URLs to blacklist for request events. They can be [wildcards.](#wildcards)                                                                                                                                                                 |\n| `requestBodyWhitelist`        | `Array[RequestBodyConfig]`             | `null`        | URLs to capture request body. [See details](#request-body-config)                                                                                                                                                                          |\n| `requestHeadersWhitelist`     | `Array[RequestHeadersConfig]`          | `null`        | URLs to capture request headers. [See details](#request-headers-config)                                                                                                                                                                    |\n| `automaticViewDetection`      | `'title' \\| 'path' \\| 'both' \\| false` | `'both'`      | You can set it to false to disable it, 'title' if you want to capture page title, 'path' if you want to capture URL path, or 'both' if you want both as View Name. This affects to View Name in metrics, navigation events, and UI events. |\n| `rageClick`                   | `Object`                               | `{}`          | Configuration for Rage Click events.                                                                                                                                                                                                       |\n| `rageClick.active`            | `Boolean`                              | `true`        | Activate or deactivate Rage Click events.                                                                                                                                                                                                  |\n| `rageClick.screenshot`        | `Boolean`                              | `true`        | Capture screenshot on Rage Click events. This functionality is only available if you install '@obslysdk/screenshot' library.                                                                                                               |\n| `rageClick.screenshotPercent` | `Number[0,1]`                          | `0.25`        | The ratio of screenshots to be taken based on Rage Click events. This reduces the number of screenshots taken. It must be a value between 0 and 1. This functionality is only available if you install '@obslysdk/screenshot' library.     |\n| `sessionMaxLengthMins`        | `Number`                               | `60`          | Duration of a session in minutes.                                                                                                                                                                                                          |\n| `keepSessionOnRefresh`        | `Boolean`                              | `false`       | Keep the session active after a page refresh.                                                                                                                                                                                              |\n| `enableScreenshotOnUi`        | `Boolean`                              | `false`       | If it's true, on each Click, and Life Cycle events will be attached an screenshot. This functionality is only available if you install '@obslysdk/screenshot' library.                                                                     |\n| `captureConsole`              | `Boolean`                              | `true`        | If it's true, console.warn and console.error will be captured as Tags.                                                                                                                                                                     |\n| `captureBodyOnError`          | `Boolean`                              | `false`       | Capture Request and Response headers/body on error. This is only applicable when `enableRequestLog` is true.                                                                                                                               |\n| `ssr`                         | `Boolean`                              | `false`       | Enable / Disable support for server side rendering (SSR). [See details](#ssr-support)\\*                                                                                                                                                    |\n| `bufferSize`                  | `Number`                               | `null`        | If BufferSize has a value, When the value of the number of events is reached, a shipment will occur.                                                                                                                                       |\n| `messengerInterval`           | `Number`                               | `null`        | messengerInterval defines the milliseconds before send a events package. It must be higher than 10 seconds for be valid. By default, it's setted to 30000 ms (30 seconds)                                                                  |\n| `webViewMode`                 | `string`                               | `false`       | Set JS SDK in WebView Mode. [See details](#webview-mode)                                                                                                                                                                                   |\n| `bridge`                      | `Object`                               | `{}`          | Configuration for Bridge functionality. [See details](#bridge)                                                                                                                                                                             |\n| `bridge.enabled`              | `Boolean`                              | `false`       | Enable or disable the Bridge feature to allow communication with other systems or frameworks.                                                                                                                                              |\n| `sessionReplay`               | `Object`                               | `{}`          | Configuration for Session Replay functionality. [See details](#session-replay)                                                                                                                                                             |\n| `devtools`                    | `Object`                               | `{}`          | Configuration for Devtools functionality. [See details](#devtools)                                                                                                                                                                         |\n| `rateLimits`                  | `Object`                               | `{}`          | Configuration for rate limiting event capturing. [See details](#rate-limit-configuration)                                                                                                                                                  |\n\n#### Code Example\n\n```javascript\nObslySDK.init({\n  ObslyKey: 'ObslyKey',\n  instanceURL: 'https://api-url',\n  remoteConfigURL: 'https://api-url',\n  proEnv: true,\n  appVersion: '4.1.0',\n  appName: 'myApp',\n  config: {\n    requestBlacklist: ['https://url1.com', 'https://url2.com'],\n    requestHeadersWhitelist: [\n      {\n        url: 'https://api.example.com/sensitive/*',\n        fromStatus: 400,\n        toStatus: 599,\n        headers: ['content-type', 'x-request-id'] // Only capture these specific headers\n      }\n    ],\n    rateLimits: {\n      base: {\n        bucketSize: 20\n      },\n      error: {\n        rejectWhenBucketFull: false\n      }\n    }\n  }\n})\n```\n\n#### SSR Support\n\nThe `ssr` parameter is crucial for applications leveraging Server-Side Rendering (SSR). When set to `true`, the SDK modifies its behavior for link clicks (`<a>` tags) in the following ways:\n\n- **Link Click Interception**: The SDK intercepts default browser navigation for `<a>` tag clicks.\n- **Event Flushing**: All pending events are flushed to Obsly servers before navigation occurs.\n- **Programmatic Navigation**: The page transition is handled programmatically via `window.location.href` after events are flushed.\n\nThis ensures that all collected observational data, such as UI events and performance metrics, are sent before the page unloads, thus preventing data loss in SSR environments.\n\n#### Rate Limit Configuration\n\nRate limiting allows you to control the frequency of events being captured and sent to the server. You can configure rate limits for different event types:\n\n| Event Type    | Description                                      |\n| ------------- | ------------------------------------------------ |\n| `base`        | Basic events                                     |\n| `request`     | Network request events                           |\n| `tag`         | Tag events                                       |\n| `console`     | Console log events (console.warn, console.error) |\n| `ui`          | User interface interaction events                |\n| `metric`      | Metric events                                    |\n| `error`       | Error events                                     |\n| `performance` | Performance measurement events                   |\n| `navigation`  | Navigation events                                |\n\nEach rate limit configuration accepts the following parameters:\n\n| Parameter              | Type      | Default   | Description                                                          |\n| ---------------------- | --------- | --------- | -------------------------------------------------------------------- |\n| `interval`             | `Number`  | `1000`    | The interval in milliseconds for rate limiting                       |\n| `trailing`             | `Boolean` | `false`   | Whether to send trailing events after the rate limit period          |\n| `bucketSize`           | `Number`  | `10`\\*    | The maximum number of events to process within an interval           |\n| `emptyBucketDelay`     | `Number`  | `1000`    | The delay in milliseconds before emptying the bucket after it's full |\n| `rejectWhenBucketFull` | `Boolean` | `false`\\* | Whether to reject events when the bucket is full or queue them       |\n\n\\* Some events has some specific configurations to improve the performance and avoid the loss of events:\n\n- `bucketSize`:\n  - `request`: 20\n- `rejectWhenBucketFull`:\n  - `console`: true\n  - `error`: true\n\nExample of custom configuration:\n\n```javascript\nconst config = {\n  rateLimits: {\n    error: {\n      interval: 2000, // If the bucket is full, process error events every 2 seconds to slow down the rate of events\n      bucketSize: 15, // Allow up to 15 error. If you reach this limit, the bucket is full and we enter in the rate limit mode\n      trailing: true, // Send trailing events after the rate limit period\n      emptyBucketDelay: 2000, // Wait 2 seconds of stop sending 'error' events to empty the bucket\n      rejectWhenBucketFull: false // Queue events when bucket is full\n    },\n    ui: {\n      bucketSize: 20, // Allow up to 20 UI events. If you reach this limit, the bucket is full and we enter in the rate limit mode\n      emptyBucketDelay: 2000 // Wait 2 seconds of stop sending 'ui' events to empty the bucket\n      // The rest of the parameters are the same as the base configuration...\n    }\n  }\n}\n```\n\n#### Request Headers Config\n\nRequests Headers Config must be an Object with the following parameters:\n\n| Parameter    | Type            | Example                       | Description                                                                                                  |\n| ------------ | --------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ |\n| `url`        | `String`        | `http://localhost:8080/api/*` | URL to capture headers. They can be [wildcards.](#wildcards)                                                 |\n| `fromStatus` | `Number`        | `400`                         | Min Status Code to capture Headers (Included).                                                               |\n| `toStatus`   | `Number`        | `500`                         | Max Status Code to capture Headers (Included).                                                               |\n| `headers`    | `Array[String]` | `[\"x-*\", \"authorization\"]`    | List of specific headers to capture. Header names are case-insensitive. They can be [wildcards.](#wildcards) |\n\n#### Request Body Config\n\nRequests Body Config must be an Object with the following parameters:\n\n| Parameter             | Type      | Example                       | Description                                               |\n| --------------------- | --------- | ----------------------------- | --------------------------------------------------------- |\n| `url`                 | `String`  | `http://localhost:8080/api/*` | URL to capture body. They can be [wildcards.](#wildcards) |\n| `fromStatus`          | `Number`  | `400`                         | Min Status Code to capture Body (Included).               |\n| `toStatus`            | `Number`  | `500`                         | Max Status Code to capture Body (Included).               |\n| `captureRequestBody`  | `Boolean` | `true`                        | Capture Request body.                                     |\n| `captureResponseBody` | `Boolean` | `true`                        | Capture Response body.                                    |\n\n#### Wildcards\n\nWildcards provide flexible pattern matching in the SDK for both URLs and header names.\n\n##### URL Wildcards\n\nURL wildcards allow you to match a range of URLs with a single pattern:\n\n- **Simple Pattern**: `https://example.com/*` matches URLs starting with `https://example.com/`, including any path or query string.\n- **Subdomain Pattern**: `https://*.example.com/*` matches any subdomain of example.com (e.g., `https://www.example.com/`, `https://api.example.com/`).\n- **Domain Pattern**: `*.example.com/*` matches example.com and all its subdomains, with any path.\n\n```javascript\n{\n  requestBlacklist: [\n    'https://analytics.example.com/*', // Block all analytics endpoints\n    'https://*.thirdparty.com/*' // Block all third-party domains\n  ]\n}\n```\n\n##### Header Name Wildcards\n\nThe same wildcard pattern matching can be applied to header names in `RequestHeadersConfig`:\n\n- **Contains Pattern**: `*content*` matches any header containing 'content' (e.g., 'content-type', 'content-length', 'x-content-security').\n- **Prefix Pattern**: `content*` matches headers starting with 'content' (e.g., 'content-type', 'content-encoding').\n- **Suffix Pattern**: `*type` matches headers ending with 'type' (e.g., 'content-type', 'accept-type').\n\n```javascript\n{\n  url: 'https://api.example.com/*',\n  fromStatus: 200,\n  toStatus: 599,\n  headers: [\n    '*content*',        // Capture all headers containing 'content'\n    'authorization',    // Capture the authorization header\n    'x-*'               // Capture all headers starting with 'x-'\n  ]\n}\n```\n\nThis wildcard functionality provides powerful flexibility for both URL matching and header filtering in your SDK configuration.\n\n#### Webview Mode\n\nWebview mode is used when the JavaScript SDK is initialized within a Webview that is being monitored by one of the native Obsly SDKs for Android or iOS. When this mode is enabled, all events will stop sending their own session metadata (USER, DEVICE, and APP) and instead, these values will be replaced with those from the native application.\n\n## Developer Methods\n\nThese are the following APIs available to use from the SDK:\n\n<details id=\"manage-sessions\">\n<summary>\n  Manage sessions\n</summary>\n\n### Manage Sessions\n\n---\n\n#### Session Types\n\nSessions can be of two types: **Stateless** or **Stateful**.\n\n- **Stateless Sessions**: Each page reload or new tab is considered a new session.\n- **Stateful Sessions**: The session is maintained and shared across tabs. The session ends only through a timeout or forced closure using the provided methods. Additionally, if an event occurs during a stateful session, the session's timeout will be refreshed to the expiration time defined.\n\n| Parameter              | Type     | Default Value | Description                       |\n| ---------------------- | -------- | ------------- | --------------------------------- |\n| `sessionMaxLengthMins` | `Number` | `60`          | Duration of a session in minutes. |\n\nBoth the type of session (Stateless or Stateful) and the timeout duration are configurable through the [SDK configuration](#config-structure) with the parameters **keepSessionOnRefresh** and **sessionMaxLengthMins**.\n\n---\n\n#### Session Management Functions\n\nThis set of functions is dedicated to managing user sessions within your application. Sessions play a pivotal role in understanding user behavior. <br> A new session is initialized on the first load of your web application. Sessions can be concluded in response to specific user actions, such as logging out or exiting the application.\n\n#### Function Definitions\n\n| Function Name         | Parameters        | Type     | Required | Async | Return Type | Description                                                                                       |\n| --------------------- | ----------------- | -------- | -------- | ----- | ----------- | ------------------------------------------------------------------------------------------------- |\n| `closeCurrentSession` | None              | N/A      | No       | Yes   | `void`      | Closes the current session.                                                                       |\n| `createNewSession`    | `customSessionID` | `string` | Yes      | Yes   | `void`      | Initiates a new Obsly session with a customSessionID. If the ID is invalid, it will be generated. |\n\n---\n\n#### Description\n\n- **`closeCurrentSession()`**\n\n  - **Parameters**: None\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Closes the current session.\n\n- **`createNewSession(customSessionID)`**\n  - **Parameters**:\n    - `customSessionID: string` (Required): The custom session ID to initiate the new session. If the ID is invalid, a new ID will be generated.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Initiates a new Obsly session with a custom session ID. If the ID is invalid, a new ID will be generated.\n\n#### Example\n\n```javascript\n//Finishes the current Session and start automatically a new one\nObslySDK.closeCurrentSession()\n\n//Finishes the current Session and start automatically a new one with a custom Session ID\nObslySDK.createNewSession('Custom Session ID')\n```\n\n#### Custom SessionID\n\nThere are two options to specify a custom Session ID:\n\n- Via the init function, as a parameter.\n- Using the createNewSession function after initialization.\n\nRemember that if you are using a stateful session and you provide a custom Session ID, a new Session ID will be generated after the session expires.\n\n---\n\n</details>\n\n<details id=\"client-identification\">\n<summary>\n  Client identification\n</summary>\n\n### Client identification\n\n---\n\nClient Identification involves associating unique identifiers with user sessions, enabling more precise tracking and personalized analysis.\n\n#### Function Definitions\n\n| Function Name   | Parameters   | Type     | Required | Async | Return Type | Description           |\n| --------------- | ------------ | -------- | -------- | ----- | ----------- | --------------------- |\n| `setUserID`     | `userID`     | `string` | Yes      | No    | `void`      | Sets the user ID.     |\n| `setPersonID`   | `personID`   | `string` | Yes      | No    | `void`      | Sets the person ID.   |\n| `setPassportID` | `passportID` | `string` | Yes      | No    | `void`      | Sets the passport ID. |\n| `setContractID` | `contractID` | `string` | Yes      | No    | `void`      | Sets the contract ID. |\n\n---\n\n#### Description\n\n- **`setUserID(userID)`**\n\n  - **Parameters**:\n    - `userID: string` (Required): The user ID to be set.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the user ID.\n\n- **`setPersonID(personID)`**\n\n  - **Parameters**:\n    - `personID: string` (Required): The person ID to be set.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the person ID.\n\n- **`setPassportID(passportID)`**\n\n  - **Parameters**:\n    - `passportID: string` (Required): The passport ID to be set.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the passport ID.\n\n- **`setContractID(contractID)`**\n  - **Parameters**:\n    - `contractID: string` (Required): The contract ID to be set.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the contract ID.\n\n#### Example\n\n```javascript\n// Set user ID\nObslySDK.setUserID('User1')\n```\n\n---\n\n</details>\n\n<details id=\"application-identification\">\n<summary>\n  Application identification\n</summary>\n\n### Application identification\n\n---\n\nObsly SDK provides modules for identifying application-specific information.\nIt allows to identify the App Name and the Version.\n\n#### Function Definitions\n\n| Function Name   | Parameters   | Type     | Required | Async | Return Type | Description                   |\n| --------------- | ------------ | -------- | -------- | ----- | ----------- | ----------------------------- |\n| `setAppName`    | `appName`    | `string` | Yes      | No    | `void`      | Sets the application name.    |\n| `setAppVersion` | `appVersion` | `string` | Yes      | No    | `void`      | Sets the application version. |\n\n#### Description\n\n- **`setAppName(appName)`**\n\n  - **Parameters**:\n    - `appName: string` (Required): The name of the application to be set.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the application name.\n\n- **`setAppVersion(appVersion)`**\n  - **Parameters**:\n    - `appVersion: string` (Required): The version of the application to be set.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the application version.\n\n#### Example\n\n```javascript\n// Set App Name\nObslySDK.setAppName('MyNewApp')\n\n// Set App Version\nObslySDK.setAppVersion('1.2.0')\n```\n\n---\n\n</details>\n\n<details id=\"tag\">\n<summary>\n  Tag\n</summary>\n\n### Tag\n\nThe Tag functionality in the Obsly SDK is designed to enable the creation of custom key-value pairs, known as tags, that can be attached to user sessions or events. \\\nThese tags can be strategically attached to user sessions or specific events within your application. This functionality is particularly advantageous for generating 'breadcrumbs', which serve as navigational aids in comprehensively understanding a user's interaction flow within the application.\n\n#### `Tag`\n\nA `Tag` is an object with the following structure:\n\n- **key: string** (Required): A unique identifier for the tag. This should be a string that represents the tag's key.\n- **value: string** (Required): The value associated with the tag's key. This should be a string representing the value.\n\n```json\n{\n  \"key\": \"TAG1\",\n  \"value\": \"VALUE1\"\n}\n```\n\n#### Function definitions\n\n| Function Name | Parameters               | Type                     | Required   | Async | Return Type | Description                                                       |\n| ------------- | ------------------------ | ------------------------ | ---------- | ----- | ----------- | ----------------------------------------------------------------- |\n| `addTag`      | `tags`<br><br>`category` | `Array<Tag>`<br>`string` | Yes<br>Yes | Yes   | `void`      | Creates a key & value tag with the given category and tags array. |\n\n#### Description\n\n- **`addTag(tags, category)`**\n\n  - **Parameters**:\n    - `tags: Array<object>` (Required): An array of key-value tag objects, each containing a `key` (string) and a `value` (string).\n    - `category: string` (Required): A string representing the category for the tags.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Creates a key-value tag with the provided tags array and associates it with the specified category.\n\n#### Example\n\n```javascript\nconst tags = [\n  {\n    key: 'TAG1',\n    value: 'VALUE1'\n  },\n  {\n    key: 'TAG2',\n    value: 'VALUE2'\n  }\n]\n\nconst category = 'NEW_CATEGORY'\n\nObslySDK.addTag(tags, category)\n```\n\n---\n\n</details>\n\n<details id=\"screenshot\">\n<summary>\nScreenshot\n</summary>\n\n### Screenshot\n\nThis feature is especially useful for visual analysis and debugging purposes, offering a snapshot view of the user's current application state.\n\n> **Note:** These functionalities are only available when the `@obslysdk/screenshot` library is installed. The library must be imported in your main entry point **before executing the `init` method** of the `@obslysdk/browser` SDK.\n\n#### Function Definitions\n\n| Function Name   | Parameters | Type | Required | Async | Return Type       | Description                                    |\n| --------------- | ---------- | ---- | -------- | ----- | ----------------- | ---------------------------------------------- |\n| `addScreenshot` | None       | N/A  | No       | Yes   | `void`            | Creates a browser screenshot event.            |\n| `getScreenshot` | None       | N/A  | No       | Yes   | `Promise<string>` | Returns a Base64 image string of a screenshot. |\n\n#### Description\n\n- **`addScreenshot()`**\n\n  - **Parameters**: None\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Creates a browser screenshot event.\n\n- **`getScreenshot()`**\n  - **Parameters**: None\n  - **Return Type**: `Promise<string>`\n  - **Async**: Yes\n  - **Description**: Returns a Base64 image string of a screenshot.\n\n#### Example\n\n```javascript\nconst takeScreenshot = () => {\n  ObslySDK.addScreenshot()\n}\n\nconst screenImage = async () => {\n  await ObslySDK.getScreenshot()\n}\n```\n\n---\n\n</details>\n\n<details id=\"performance\">\n<summary>\nPerformance\n</summary>\n\n## Performance\n\n> While the functions in this section can be imported directly, for better readability it is recommended to access them via the `Performance` API (e.g., `ObslySDK.Performance.startTransaction(...)`).\n\nMetrics are a fundamental feature that allows for the precise measurement of performance within your application. \\\nThey are primarily instrumented through performance events, which are designed to record the time elapsed between various stages or steps in a process.\n\n#### Function Definitions\n\n| Function Name      | Parameters                                                               | Type                                         | Required               | Async | Return Type | Description                                                                                                                                                 |\n| ------------------ | ------------------------------------------------------------------------ | -------------------------------------------- | ---------------------- | ----- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `startTransaction` | `name`<br>`description`<br>`startNanoTime`<br>`autofinishWithStepsCount` | `string`<br>`string`<br>`number`<br>`number` | Yes<br>No<br>No<br>No  | Yes   | `void`      | Starts a performance event with the given name and optional parameters for description, start time, and automatic finish after a specified number of steps. |\n| `endTransaction`   | `name`<br>`updatedDescription`                                           | `string`<br>`string`                         | Yes<br>No              | Yes   | `void`      | Ends a performance event with the specified name and optionally updates its description.                                                                    |\n| `startStep`        | `transactionName`<br>`stepName`<br>`description`<br>`startNanoTime`      | `string`<br>`string`<br>`string`<br>`number` | Yes<br>Yes<br>No<br>No | Yes   | `void`      | Starts a step for an existing performance event with the specified name, step name, and optional parameters for description and start time.                 |\n| `finishStep`       | `transactionName`<br>`stepName`<br>`updatedDescription`                  | `string`<br>`string`<br>`string`             | Yes<br>Yes<br>No       | Yes   | `void`      | Ends a step for an existing performance event and optionally updates the step's description.                                                                |\n\n#### Description\n\n- **`startTransaction(name, description, startNanoTime, autofinishWithStepsCount)`**\n\n  - **Parameters**:\n    - `name: string` (Required): The name of the performance event to start.\n    - `description: string` (Optional): A description of the step.\n    - `startNanoTime: number` (Optional): A number higher than 0 to set the start moment.\n    - `autofinishWithStepsCount: number` (Optional): A number higher than 0 to automatically close the performance event after N steps.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Starts a performance event with the given name and optional parameters for description, start time, and automatic finish after a specified number of steps.\n\n- **`finishTransaction(name, updatedDescription)`**\n\n  - **Parameters**:\n    - `name: string` (Required): The name of the performance event to end.\n    - `updatedDescription: string` (Optional): An updated description for the performance event.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Ends a performance event with the specified name and optionally updates its description.\n\n- **`startStep(transactionName, stepName, description, startNanoTime)`**\n\n  - **Parameters**:\n    - `transactionName: string` (Required): The name of the performance event to which the step belongs.\n    - `stepName: string` (Required): The name of the step.\n    - `description: string` (Optional): A description of the step.\n    - `startNanoTime: number` (Optional): A number higher than 0 to set the start moment of the step.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Starts a step for an existing performance event with the specified name, step name, and optional parameters for description and start time.\n\n- **`finishStep(name, transactionName, updatedDescription)`**\n\n  - **Parameters**:\n    - `transactionName: string` (Required): The name of the performance event to which the step belongs.\n    - `stepName: string` (Required): The name of the step.\n    - `updatedDescription: string` (Optional): An updated description for the step.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Ends a step for an existing performance event and optionally updates the step's description.\n\n#### Example\n\n```javascript\nasync function createMetric() {\n  // Start a new Transaction\n  await ObslySDK.Performance.startTransaction(\n    'DASHBOARD',\n    'Dashboard performance'\n  )\n\n  // Create a new step Load Dashboard\n  await ObslySDK.Performance.startStep('DASHBOARD', 'Load Dashboard')\n\n  // End step on Load Dashboard\n  await ObslySDK.Performance.finishStep('DASHBOARD', 'Load Dashboard')\n\n  // Finally after all the steps, close the transaction\n  await ObslySDK.Performance.endTransaction('DASHBOARD')\n}\n```\n\n---\n\n</details>\n\n<details id=\"metrics\">\n<summary>\n  Metrics\n</summary>\n\n### Metrics\n\n> While the functions in this section can be imported directly, for better readability it is recommended to access them via the `Metrics` API (e.g., `ObslySDK.Metrics.incCounter(...)`).\n\nRegarding metrics, we have 3 types of metrics:\n\n- **Counter**: Any metric that increments over time.\n- **Gauge**: For measuring fluctuating values.\n- **HistogramTimer**: For measuring execution time.\n\nTo use the different types of metrics, we have the following methods:\n\n#### Function Definitions\n\n| Function Name         | Parameters                                                                                                                                                | Type                                                                 | Required                           | Async | Return Type | Description                                                                                                    |\n| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------- | ----- | ----------- | -------------------------------------------------------------------------------------------------------------- |\n| `incCounter`          | `key: string`<br>`fbl: string` (Optional)<br>`operation: string` (Optional)<br>`view: string` (Optional)<br>`state: string` (Optional)                    | `string`<br>`string`<br>`string`<br>`string`<br>`string`             | Yes<br>No<br>No<br>No<br>No        | No    | `void`      | Increments the value of a counter by 1 with the given key. Optional parameters can provide additional context. |\n| `setGauge`            | `key: string`<br>`value: number`<br>`fbl: string` (Optional)<br>`operation: string` (Optional)<br>`view: string` (Optional)<br>`state: string` (Optional) | `string`<br>`number`<br>`string`<br>`string`<br>`string`<br>`string` | Yes<br>Yes<br>No<br>No<br>No<br>No | No    | `void`      | Sets the value of the metric with the given key and value. Optional parameters can provide additional context. |\n| `startHistogramTimer` | `key: string`<br>`fbl: string` (Optional)<br>`operation: string` (Optional)<br>`view: string` (Optional)                                                  | `string`<br>`string`<br>`string`<br>`string`                         | Yes<br>No<br>No<br>No              | No    | `void`      | Starts a HistogramTimer with the given key. Optional parameters can provide additional context.                |\n| `endHistogramTimer`   | `key: string`<br>`fbl: string` (Optional)<br>`operation: string` (Optional)<br>`view: string` (Optional)<br>`state: string` (Optional)                    | `string`<br>`string`<br>`string`<br>`string`<br>`string`             | Yes<br>No<br>No<br>No<br>No        | No    | `void`      | Ends a HistogramTimer with the given key. Optional parameters can provide additional context.                  |\n\n#### Description\n\n- **`incCounter(key, fbl, operation, view, state)`**\n\n  - **Parameters**:\n    - `key: string` (Required): The key or name of the metric to increment.\n    - `fbl: string` (Optional): The functional block label where the increment is being executed.\n    - `operation: string` (Optional): The operation being performed.\n    - `view: string` (Optional): The view where the increment is being executed.\n    - `state: string` (Optional): The state of the operation, e.g., \"OK\" or \"KO\".\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Increments the value of a counter by 1 with the specified key. Optional parameters provide additional context.\n\n- **`setGauge(key, value, fbl, operation, view, state)`**\n\n  - **Parameters**:\n    - `key: string` (Required): The key or name of the metric.\n    - `value: number` (Required): The new value to set for the metric.\n    - `fbl: string` (Optional): The functional block label where the gauge is being set.\n    - `operation: string` (Optional): The operation being performed.\n    - `view: string` (Optional): The view where the gauge is being set.\n    - `state: string` (Optional): The state of the operation, e.g., \"OK\" or \"KO\".\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Sets the value of the metric with the given key and value. Optional parameters provide additional context.\n\n- **`startHistogramTimer(key, fbl, operation, view)`**\n\n  - **Parameters**:\n    - `key: string` (Required): The key or name of the metric.\n    - `fbl: string` (Optional): The functional block label where the timer is being started.\n    - `operation: string` (Optional): The operation being performed.\n    - `view: string` (Optional): The view where the timer is being started.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Starts a HistogramTimer with the specified key. Optional parameters provide additional context.\n\n- **`endHistogramTimer(key, fbl, operation, view, state)`**\n\n  - **Parameters**:\n    - `key: string` (Required): The key or name of the metric.\n    - `fbl: string` (Optional): The functional block label where the timer is being ended.\n    - `operation: string` (Optional): The operation being performed.\n    - `view: string` (Optional): The view where the timer is being ended.\n    - `state: string` (Optional): The state of the operation, e.g., \"OK\" or \"KO\".\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Ends a HistogramTimer with the specified key. Optional parameters provide additional context.\n\n#### Example\n\n```javascript\nasync function fetchData(fbl, operation, view) {\n  const key = \"MY_FETCH_TIME\";\n  ObslySDK.Metrics.startHistogramTimer(key, fbl, operation, view);\n  let response = await fetch(\"https://api.example.com/data\");\n  ObslySDK.Metrics.endHistogramTimer(key, fbl, operation, view);\n  return await response.json();\n}\n\nasync function onClick(fbl, operation, view) {\n  const key = \"CLICK_EVENT\";\n  ObslySDK.Metrics.incCounter(key, fbl, operation, view);\n  ...\n}\n\nasync function onChange(value, fbl, operation, view) {\n  const key = \"MY_VALUE\";\n  ObslySDK.Metrics.setGauge(key, value, fbl, operation, view)\n}\n\nconst fbl = \"FBL_EXAMPLE\";\nconst operation = \"OPERATION_EXAMPLE\";\nconst view = \"VIEW_EXAMPLE\";\n\nfetchData(fbl,operation,view);\nonClick(fbl,operation,view);\nonChange(2,fbl,operation,view);\n```\n\n---\n\n</details>\n\n<details id=\"rage-click\">\n<summary>\n  Rage Click\n</summary>\n\n### Rage Click\n\nRage Click refers to a user behavior where multiple clicks are made in quick succession on a specific area of the screen or on a single component. This pattern often indicates that the user is experiencing frustration or difficulty with a particular part of the application, suggesting potential issues or malfunctions within that area. The rapid, repeated clicking is usually a sign that the user is attempting to interact with or resolve a problem that is not responding as expected.\n\nBy default, Rage Click is enabled and takes screenshots 25% of the time. These parameters can be configured during the initialization of the Obsly SDK [See Configuration section](#configuration).\n\nNote: There may be elements in your application that you do not want to be treated as rage clicks, such as pagination buttons that are clicked in a very consecutive manner. In order to avoid false positives from rage clicks, you can put a tag on the component that you do not want to monitor.\n\nThe tag is `data-ignore-rage-click`, with value 'true'.\n\nIf you use `data-ignore-rage-click-deep`, also all its children will ignore Rage Click events.\n\n#### Example\n\n```javascript\n// Ignore only the parent\n<div data-ignore-rage-click=\"true\">\n  <p>Here, I can detect rage click</p>\n</div>\n\n\n// Ignore the parent and all the children\n<div data-ignore-rage-click-deep=\"true\">\n  <div id=\"Test\"></div>\n</div>\n```\n\n</details>\n\n<details id=\"application-context\">\n<summary>\n  Application Context\n</summary>\n\n### Application Context\n\nIn this application, there are three main concepts: Functional Blocks, Operations, and Views. Screens belong to Operations, and Operations belong to Functional Blocks, grouping views based on their functionality. This hierarchical structure helps organize and manage the application flow efficiently.\n\nThe context variables for Functional Block, Operation, and Screen are used to control and monitor application behavior. These variables are integrated into custom metrics tracking as well as Rage Click detection, ensuring comprehensive insights into user interactions and performance across different application contexts.\n\n---\n\n#### Funcion Definitions\n\n| Function Name        | Parameters        | Type     | Required | Async | Return Type | Description                        |\n| -------------------- | ----------------- | -------- | -------- | ----- | ----------- | ---------------------------------- |\n| `setView`            | `viewName`        | `string` | Yes      | Yes   | `void`      | Sets the current view name.        |\n| `setOperation`       | `operation`       | `string` | Yes      | Yes   | `void`      | Sets the current operation.        |\n| `setFunctionalBlock` | `functionalBlock` | `string` | Yes      | Yes   | `void`      | Sets the current Functional Block. |\n\n---\n\n#### Description\n\n- **`setView(viewName)`**\n\n  - **Parameters**:\n    - `viewName: string` (Required): The name of the view to be set.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Sets the current view name for the application.\n\n- **`setOperation(operation)`**\n\n  - **Parameters**:\n    - `operation: string` (Required): The name of the operation to be set.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Sets the current operation for the application.\n\n- **`setFunctionalBlock(functionalBlock)`**\n\n  - **Parameters**:\n    - `functionalBlock: string` (Required): The name of the functional block to be set.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Sets the current functional block for the application.\n\n---\n\n</details>\n\n<details id=\"sdk-control\">\n<summary>\n  SDK Control\n</summary>\n\n### SDK Control\n\nThe following functions allow you to configure and manage the SDK's behavior and logging:\n\n---\n\n#### Function Definitions\n\n| Function Name          | Parameters  | Type       | Required | Async | Return Type | Description                                                                               |\n| ---------------------- | ----------- | ---------- | -------- | ----- | ----------- | ----------------------------------------------------------------------------------------- |\n| `pauseTracker`         |             |            |          | Yes   | `void`      | Pause capturing and sending events.                                                       |\n| `resumeTracker`        |             |            |          | Yes   | `void`      | Resets event capture and sending.                                                         |\n| `setLogLevel`          | `level`     | `string`   | Yes      | Yes   | `void`      | Sets the console log level for SDK Obsly. Allowed values: `null`, `error`, `warn`, `log`. |\n| `setRequestsBlacklist` | `blacklist` | `string[]` | Yes      | No    | `void`      | Adds a blacklist of request URLs.                                                         |\n| `getSessionInfo`       |             |            |          | Yes   | `object`    | Gets session information.                                                                 |\n| `activateFullDebug`    |             |            |          | Yes   | `void`      | Enable full debug mode.                                                                   |\n| `deactivateFullDebug`  |             |            |          | Yes   | `void`      | Disable full debug mode.                                                                  |\n\n---\n\n#### Descriptions\n\n- **`pauseTracker()`**\n\n  - **Parameters**: None\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Pauses the sending of data to the server.\n\n- **`resumeTracker()`**\n\n  - **Parameters**: None\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Resumes sending data to the server.\n\n- **`setLogLevel(level)`**\n\n  - **Parameters**:\n    - `level: string` (Required): The log level for the SDK Obsly. Allowed values are:\n      - `null`\n      - `error`\n      - `warn`\n      - `log`\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Sets the console log level for the SDK Obsly.\n\n- **`setRequestsBlacklist(blacklist)`**\n\n  - **Parameters**:\n    - `blacklist: string[]` (Required): Array of string URLs to be blacklisted.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Adds a blacklist of request URLs.\n\n- **`getSessionInfo()`**\n\n  - **Parameters**: None\n  - **Return Type**: `object`\n  - **Async**: Yes\n  - **Description**: Gets session information.\n\n---\n\n</details>\n\n<details id=\"miscelaneous\">\n<summary>\n  Miscelaneous\n</summary>\n\n### Miscelaneous\n\nThis section includes various methods that do not fall into the previously defined categories.\n\n#### Funcion Definitions\n\n| Function Name      | Parameters                                                                                     | Type                                                    | Required                                            | Async | Return Type | Description                                                                                                                    |\n| ------------------ | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------- | ----- | ----------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| `addFeedback`      | `rating: number`<br>`message: string`<br>`image?: string`                                      | `number`<br>`string`<br>`string`                        | Rating and message are required. Image is optional. | No    | `void`      | Adds a new feedback event with a rating, a message, and an optional image. The image, if provided, should be in Base64 format. |\n| `createErrorEvent` | `message: string`<br>`source: string`<br>`lineno: number`<br>`colno: number`<br>`error: Error` | `string`<br>`string`<br>`number`<br>`number`<br>`Error` | All parameters are required.                        | Yes   | `void`      | Creates a custom error event with detailed information about the error that occurred.                                          |\n\n---\n\n#### Description\n\n- **`addFeedback(rating, message, image)`**\n\n  - **Parameters**:\n    - `rating: number` (Required): The rating for the feedback event.\n    - `message: string` (Required): The message associated with the feedback.\n    - `image: string` (Optional): The image related to the feedback, encoded in Base64 format.\n  - **Return Type**: `void`\n  - **Async**: No\n  - **Description**: Adds a new feedback event with the specified rating, message, and Base64 encoded image.\n\n- **`createErrorEvent(message, source, lineno, colno, error)`**\n\n  - **Parameters**:\n    - `message: string` (Required): The error message.\n    - `source: string` (Required): The source file where the error occurred.\n    - `lineno: number` (Required): The line number where the error occurred.\n    - `colno: number` (Required): The column number where the error occurred.\n    - `error: Error` (Required): The Error object containing additional information.\n  - **Return Type**: `void`\n  - **Async**: Yes\n  - **Description**: Creates a custom error event with detailed information about the error that occurred. This can be used to manually report errors to Obsly for tracking and analysis.\n\n#### Example\n\n```javascript\n// Example of using addFeedback\nObslySDK.addFeedback(5, 'Great experience with the app!', null)\n\n// Example of using createErrorEvent\ntry {\n  // Some code that might throw an error\n  throw new Error('Custom error for demonstration')\n} catch (error) {\n  ObslySDK.createErrorEvent(error.message, 'myScript.js', 123, 45, error)\n}\n```\n\n---\n\n</details>\n\n<details id=\"bridge\">\n<summary>\n  Bridge\n</summary>\n\n### Bridge\n\nThe Bridge functionality enables communication between the Obsly SDK and the native SDKs of the platforms (Android and iOS).\n\nWhen the Bridge is enabled, the SDK can communicate directly with the native layer, which is particularly useful for applications running in a WebView. All events captured by the SDK are transmitted directly through the Bridge, providing several advantages:\n\n- **Real-time Data**: Events are sent immediately, eliminating delays associated with batching or local storage.\n- **Reduced Overhead**: Bypasses IndexedDB for storing event data, resulting in lower storage usage and improved performance for bridged applications.\n- **Unified Session**: It ensures that all events are associated with the native application's session, providing a unified view of user interactions.\n\n#### Functional Changes with Bridge Enabled\n\nWhen the Bridge is enabled, certain SDK functions behave differently to ensure seamless integration with the native layer. This is because the native SDK takes over some responsibilities, like timestamping, to maintain a unified and consistent view of performance across the entire application (WebView and native parts).\n\nSpecifically, the following functions are affected:\n\n- **`startTransaction`**: The `startNanoTime` parameter is not supported and it will be ignored. The transaction's start time is determined by the native SDK.\n- **`startStep`**: Similarly, the `startNanoTime` parameter is not supported and it will be ignored. The step's start time is managed by the native SDK.\n\nThis change ensures that performance measurements are accurate and synchronized with events occurring in the native application.\n\n#### Configuration\n\nThe Bridge feature can be enabled via the configuration object during SDK initialization:\n\n```javascript\nObslySDK.init({\n  ObslyKey: 'ObslyKey',\n  instanceURL: 'https://api-url',\n  config: {\n    bridge: {\n      enabled: true // Enable the Bridge feature\n    }\n  }\n})\n```\n\n</details>\n\n<details id=\"session-replay\">\n<summary>\n  Session Replay\n</summary>\n\n### Session Replay\n\nSession Replay allows you to record and visually replay user sessions to understand user behavior and debug issues.\n\n> **Note:** These functionalities are only available when the `@obslysdk/session-replay` library is installed. The library must be imported in your main entry point **before executing the `init` method** of the `@obslysdk/browser` SDK.\n\n#### Configuration\n\nThe Session Replay feature can be configured via the `sessionReplay` object in the SDK initialization configuration.\n\n```javascript\nObslySDK.init({\n  // ... other config\n  config: {\n    sessionReplay: {\n      autoStart: true,\n      flushIntervalMs: 10000,\n      privacy: {\n        maskAllInputs: true,\n        maskTextByClass: 'sensitive-text'\n      }\n    }\n  }\n})\n```\n\n#### Configuration Options\n\n| Parameter                    | Type      | Default     | Description                                                     |\n| ---------------------------- | --------- | ----------- | --------------------------------------------------------------- |\n| `autoStart`                  | `Boolean` | `false`     | Automatically start recording when the SDK initializes.         |\n| `flushIntervalMs`            | `Number`  | `10000`     | Interval in milliseconds to send recorded events to the server. |\n| `flushEventThreshold`        | `Number`  | `200`       | Number of events to accumulate before sending to the server.    |\n| `fullSnapshotIntervalMs`     | `Number`  | `60000`     | Interval in milliseconds to take a full DOM snapshot.           |\n| `fullSnapshotEventThreshold` | `Number`  | `200`       | Number of events to trigger a full DOM snapshot.                |\n| `instanceURL`                | `String`  | `undefined` | Custom URL for the session replay server instance.              |\n| `privacy`                    | `Object`  | `{}`        | Privacy settings for the recording.                             |\n\n##### Privacy Options\n\n| Parameter                   | Type               | Description                                                                                         |\n| --------------------------- | ------------------ | --------------------------------------------------------------------------------------------------- |\n| `maskTextByClass`           | `String \\| RegExp` | CSS class name or RegExp to mask text content.                                                      |\n| `maskTextBySelector`        | `String`           | CSS selector to mask text content.                                                                  |\n| `hideElementByClass`        | `String \\| RegExp` | CSS class name or RegExp to hide elements completely.                                               |\n| `hideElementBySelector`     | `String`           | CSS selector to hide elements completely.                                                           |\n| `excludeElementByClass`     | `String`           | CSS class name to exclude elements from recording.                                                  |\n| `maskAllInputs`             | `Boolean`          | Mask all input fields.                                                                              |\n| `maskInputTypes`            | `Object`           | Specific input types to mask (e.g., `{ email: true, password: true }`).                             |\n| `captureCanvas`             | `Boolean`          | Record canvas elements.                                                                             |\n| `captureCrossOriginIframes` | `Boolean`          | Record cross-origin iframes. **Note:** The SDK must be installed and initialized inside the iframe. |\n\n#### Function Definitions\n\n| Function Name       ","readmeFilename":"README.md"}