{"_id":"@appannie/ab-testing-hash-object","_rev":"17-ec28ed69d63b6da236737adc3096b070","name":"@appannie/ab-testing-hash-object","dist-tags":{"latest":"1.3.1"},"versions":{"1.0.1":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.0.1","description":"","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0","ts-polyfill":"^3.7.5"},"devDependencies":{"@types/create-hash":"^1.2.2"},"gitHead":"ccaf19fb859baea69f865f10d2393530783cacba","_id":"@appannie/ab-testing-hash-object@1.0.1","_nodeVersion":"13.8.0","_npmVersion":"lerna/3.20.2/node@v13.8.0+x64 (darwin)","dist":{"integrity":"sha512-DD2S86XerOcVg1fBMNFrLZB2TESbKsiK195il3+KlrDxd9XselMq7y4UNdD2QQ7L7foi2381HkR6ekuDJijIkA==","shasum":"d754bb44aab14aae49b21116b006553261cf5967","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.0.1.tgz","fileCount":2,"unpackedSize":1634,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTOYLCRA9TVsSAnZWagAAtpoP+wbZJ48xMFwFjtQMNVon\nlPNGtPDhYigNyfKKmt1JflHIA+qrn9Gu21It14ft/aeYIT2BMw2hG8qLALAY\nAMUwsOEVeUp2FzSzeGuESpk3Iz+qXvznvOQstdsuqrxMpmoG7E43h9qTbj55\n+Gxy4SaSc0OqQbPPi0gcAmwQiCT8d/c+2SuMxaujMpkKAXzuBoS9tQu6AvpQ\n+pxZbJh5QiZ5cclZvI0W+6foE462dBvYO/B+uy2p7fBbO+KJ5L5tKbozn8kr\nOyThWVbHcKShia2LwY0rAD2pfN0ib5TEKC7Df6ivZG8GyktDZ/JUOhGpuMKq\ngiftPIFIf0v6U3iSPt/7p0EvpkvgPGyNpkY1IOcye3Ab5LXq3j5MwJF3NoZi\nue9lIBpHwX/puao8oV0HSwpbHIUljoK9WyrJIUyLA5zVE0N6q50xFMCdWp8a\n0p2qc2C2R6YGRiNL+pUPAQpDapkpnyeT3MSA8c9vHyOldyZ+V1YPcWrCTeBA\nMXtT8HZWsytqQVcQlq2jkCwyZ6zJqLUcZL10VZqnHqojZgXDiQTWBJKIu7hO\na0IYteFIcrLwdU/GearCqEA1cDzYWbiUSNpdFrCDiU0yhocSH0hHn6rLsEDJ\nH39IU9qCbF0Y4xR84Z3z48VjOFN7OAXKp/bHEP/NrZodZakcTwWZohipEWWh\nebJj\r\n=cjC+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRz9dNwMSTojsPNkunixAzRxqcwdfNwbLM3j5CbiS4zAiEAhKOoLCkxnawABBNs6lEiwb9QeyyT99+pvTu6uhXWEdM="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"},{"name":"jiuyue","email":"monopieces@gmail.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.0.1_1582097931424_0.27758362291067673"},"_hasShrinkwrap":false},"1.0.3":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.0.3","description":"","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0","ts-polyfill":"^3.7.5"},"devDependencies":{"@types/create-hash":"^1.2.2"},"gitHead":"c647cfd61829ae8d9a287e646f4ab968f04bfe4c","_id":"@appannie/ab-testing-hash-object@1.0.3","_nodeVersion":"13.8.0","_npmVersion":"lerna/3.20.2/node@v13.8.0+x64 (darwin)","dist":{"integrity":"sha512-0Jdpd+fjanJtYKcnOIxF4A3RasFmPxOS5oSU4hoRDrXq5BngyCnrnti2PI48i0qjx48FVe0tSQhL2IcbsWCaUg==","shasum":"9edf0f887a6dc7d583f87b2ec4286c60cc00f506","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.0.3.tgz","fileCount":5,"unpackedSize":3663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeTfthCRA9TVsSAnZWagAA+SUP/RUiMwDtFLkoLr6lyqOC\nB84FXOMw62js0tUckLhU09oQfwo2P886hxp/Ugyf2F9z6m87FXjmWwqE8mPJ\nG9bV7bODR6MsF8RPGKslhIbliaNLXizlH73zMlVkzaxLeJHoqOD0Y0HHCQOw\nn8JsdkehBNrf0EWywlEs0uRfqShPyR7sEQGT+uEQx/rWRZTtKzxRZ0snLYo1\n7GrrXzB1a0yFk3ze1yPKzjRdQnkWxIodfcjEsqVRLHnhXxMXUDUXAjp/36/0\nFD11YK1r7EwkSHAxq/Fn0WiNQFjiixFofdm2FbBoJVwri3ClL/Sdlx3vO1ut\nq34A+O3xp9fqEn4FopgiMimUr/Qn7ppq0CUbFlAPxa9fySPNDjndgS24f6hQ\npfiooojayHTTXlPn3Loy2tF4XpsE4AHlZtwuixc8TcHgLCh7r5sLiOzggjwV\nVh1lJlNDwFZZpSp0ZGL0rFw/9wOfSw2rFVmiArg4FfAJWFx81hdnNuCEREqD\nmvqYfDQRi/uulsvgkD9QzmiDGxtSFKcvdC7O5kIqBkdV2g9JTCdYowLjSHAo\nEBmG/CP4xznXGtbKjOV22qns4HR1+lbtxqMm7mpus8PEDxwDylcIwd+IG61d\nWYSvJIflND5x+qshy9GadUZn5DzU+VhCmHsktX2XFzNehgMiJMOU1AYDwGQy\nyD3o\r\n=0TrO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAU1+sidtTnbsWds2ghpix/TjE0VZRFIzhPbMrei9cL3AiEAuIffKIk2363R1eUwUp1hz1lYqS8Uo7IVaBwAEAJ/n2A="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.0.3_1582168929547_0.7839921348473882"},"_hasShrinkwrap":false},"1.0.5":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.0.5","description":"","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"devDependencies":{"@types/create-hash":"^1.2.2"},"gitHead":"2cdcf6543bc02d17713cbbe9307c59909e1ab949","_id":"@appannie/ab-testing-hash-object@1.0.5","_nodeVersion":"13.8.0","_npmVersion":"lerna/3.20.2/node@v13.8.0+x64 (darwin)","dist":{"integrity":"sha512-TaDeQAek9cuQuuKYmGxy67HKZBbnYICO5ehMRI5ocLXy4dt/mNW617H0PEXjaSUJi/bivzl6uNdpbkfl6uTT5Q==","shasum":"7c0fc4c7a641165b920bea2b61c85e01f9c1ab75","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.0.5.tgz","fileCount":5,"unpackedSize":3552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeVd17CRA9TVsSAnZWagAAfDUP/0LodK1z53edjjMadiyH\nZzFFu/FfLPqZb+1yY5zYpLhtv0uCfHl96YuuVSIV7H9nb21tccadrXYzgK/R\nTD3L4KMCjsxssWkFxdPZ37pyH1AqEmnRwhEAVThjBVgmYXqzuY3Do1+cCXt1\n53ZG9rwxWV8ZcEZ3QW2Ybc+xZ+ctisU8ZPQua1gQMQr0fmVOlVzbQ5I/hzTj\nP7CLfiBhH2ejYnIN7T6bx0VU8+1L+EDCK8dQM71T85CoPV/E5EaBKMDycIMi\n1fhOgL+6GWzQGbm3PDqf9f90c8AQkqSxVm4PLtfcrpOG/qbqCCnXNVq2rsD1\nyuQAVRjIqdcVfd1yKFXDDSWuy8OnKGKmNpOtW9qtndXEnqmU/pNBOx2Lk+fz\n8g82/AGNFm92LBmtbniTwrG+z8RWGYM9Cw9YlXgeD5oCLIho9CytahKSJ66O\ndYin9U1L796mbkSk6cJnnbgFq77NOwShhlkpgJAx662WTLnfxWYIbgRrURW/\nzw1J4rcjA9CQ/AAVZ+L6F8qO/1My33PK0drMNwPoZr8DCelF6dS24s9Qn/22\n8DFHuHtHpCr3qzWjdhN0DhyXtXwvF4OtNxrqEwR5hjMeQUbtaDngVtZgLee5\n4YBA622hd4kwWi1j+ne8OkYchVOVSNFx8jF4ome0PUpSNiRCsOvdm62KqOyK\ng6hP\r\n=JRru\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBek3Z77VmWzR4ScDkmVLl4cQI4nrR4ndmOBZ1vWQHEGAiEAn9CKzBCZX26DhZr2jqmkvhhq3ZwsMhC5ei6Ec3Zp+6s="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.0.5_1582685562975_0.04694123432598052"},"_hasShrinkwrap":false},"1.1.0":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.1.0","description":"Utility to hash common objects used within the ab-testing framework (user profile and the configuration `force_include` section.)","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"devDependencies":{"@types/create-hash":"^1.2.2"},"gitHead":"93c711a97928c479e96f2cc87000f68655ddb569","_id":"@appannie/ab-testing-hash-object@1.1.0","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (linux)","dist":{"integrity":"sha512-tfz/0E9sYkqMbKPe/7euinaAiiMEfOEn5X40HFjbt9wkV8rDRXYEGSSUTQTgKT/SRK+Km8cFDe2Lwi2XfGIAaA==","shasum":"6e5013b2777da3cdbae80f4607a6a1090c6a2f97","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.1.0.tgz","fileCount":7,"unpackedSize":4929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaK6fCRA9TVsSAnZWagAAwqYP/2IrsU+Z4I5kO6o1Jlfa\njtF1iAWozgaTyYeh1EOjhDRqwl85pt8/8Shy92w06c8a2226NrPfxNbUu+BU\nGrx2FueblaGYnMGeLwp5lWoWHesjzcu+16mEAjl2ou4vh8+ldQNG/23e/JqJ\nzcgBxlepEAtQKbtQpiomd8X93PX8VL5FWuqmeqVRPPeOQDhoI+0fFVGZUHJr\nFTIVDhcYS+9rFg52EQsKs3NhsmFs+WMaCtl6QIKPAENtdF6gFtEFO/Pf1/gG\n87l0783I2gtWZzN32bhk7BGvfZfDinQleotRPpxsCQUwOQlMgdEmmiTfbcbi\ntHi8qnDGxoO66Utdmm1nCYy98bAuYyJTufPnYWCDgitOFvrTMHaq06pvbmJi\nILR9TVp7gSEdURJII3YRgkLU1BY0dBEpcGpAynxNAFv0iUOuC37Jti9zMRbj\niDt8RQObHmZB37xZAGGJeJ5ZP3UncmAC1ZSzL9nvNh38MTsbjRzNdAVUr5we\nG3r0wVHIjrcMo6xJveUQAoeBzQJ4TDf7KQgT4lnPvq66pzwMCK4IyefPZ12B\n/tfwH0RZ5oGUzpx29mqgennNdWmCEawpX1Ee+2FPBAVebn1NUAcwcMNR3b19\nKkjxLz/+mHiE9LyKLxM3Bg6KY/R+f2m+LEEgM86TwvN4QpeViG1/wrp2IhKI\nfFag\r\n=eGYq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyGUF6eioX75GzeBlDBrFkxdxg0yyjVo0pbql3WM37MAiEA130XAgBI0bSOB9rOIUF9nRj+D+eDkfKIkCV0WxSy3yY="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.1.0_1583918751149_0.8062842528755072"},"_hasShrinkwrap":false},"1.1.1":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.1.1","description":"Utility to hash common objects used within the ab-testing framework (user profile and the configuration `force_include` section.)","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"74c95295cfcee0b3787fa23f9e2e859f8a369015","_id":"@appannie/ab-testing-hash-object@1.1.1","_nodeVersion":"12.16.1","_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (linux)","dist":{"integrity":"sha512-SW8dggprkL178xl42W0/BMwDeiT/UnQqvyviwf4k5X6xNGihY07lDkEcLNSaOa1UF7WKaHhCHhxc4nWdnZVT9g==","shasum":"685fc439b19713a38a67debe9b4b2ede5bbc5117","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.1.1.tgz","fileCount":7,"unpackedSize":4978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecXJcCRA9TVsSAnZWagAAMK4P/1kPeop8FhcLM7lHZbDZ\nAWWOGPfj6q7swzdx/Ho4Dwg07InbF9UKI3kE9zNMGTx3X7gxwwiXvvsvZm20\nC67/wiyUJXUBg5RYDvBS5a3wE9QuNsH9Oj7TaTSEd7s/deBEc7PCTg+HMGuw\nuhPcdMLBikQVPvYfDxe5wSMq5GdjZrbnj0noNFmeu8W1H7pczmx5n+0ibz7Y\nflkwloqWh1G7LoPGgeXQC5isom9XJCyWVQS3lRNfl8lB7IbXayn3UCJn06wv\niGVvGq6mj3Au4DDGYM58LJzapQX4UlECF49dWLKkWCdJz6IqhZ5oT9XNlwaM\n+2LJ0lwUMuSmiLRE3I6Oj4dwUzOtjwRlqgDQ8/irQ2mpXj8D/846db/UiqYd\njkAQNeGzpU7i2n973NkbmVPG4cnrQ8kSbiifAI3C4QY/fPuCSanEVOy9tvrk\nrsNWUm7lP8HbiycMK/WDEGFKNm/neexcvRqzybMAKPdv/Q5sUdLYklM/7UYE\n6GsrGhpX5D9jRwU0Stk9GXtNVPMMHv8jeXs9/V1GLWlS5yQTg0agtU2Xs8eY\n6ukLI3+GOwTJv1NG3R1tmLiW+B1c/d5b5B4rK9yJsGBHh9t3RadJ+cUwZQk0\nfKC5yNimXHR63vj2Ar1TbfDNwaue0QsLKw8m8jWA+GUfyIaH1EVYHMbd50ty\nrR/W\r\n=drhj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH7upPxb0MYUY5zU8M8xDzo3cBn/HvmHKSE0k9r8v5KqAiBwHUtyUNUcfeac0JLchK1t5qSBU7TU4vCPS/tGCJbHlQ=="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.1.1_1584493147448_0.14250610326706026"},"_hasShrinkwrap":false},"1.1.2":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.1.2","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"b046b52c73efa9e53422c35650680a6c7d6fb970","_id":"@appannie/ab-testing-hash-object@1.1.2","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.21.0/node@v12.16.3+x64 (linux)","dist":{"integrity":"sha512-tPMdQyT8JN7QEOQtRw3/qnXscFzKL05whMyAHYO2bdPtEWXthN7ka3EwpfgjS0rYmjk0BsUW0am5XkR8kLoftQ==","shasum":"d1cce31612d9a29b35b508ee6abb5eae4698006d","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.1.2.tgz","fileCount":6,"unpackedSize":4027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexSuKCRA9TVsSAnZWagAAspQP/RMnDGHo8AsklbEmM0dL\nqDMqgn3kDXuVtl6VZ9yLFfBCEa6UasMwAJbJEMootdxIyPL0s9JxZI/QmwN6\nb7smt7BBOnDS/R9i5ngaV1lulSHXe4gzRqgmnUBFcLzdKx//Q0zokMshPSlO\n63Phuw3hxjowQZXi7qzJu78CWKdWta8OXrpdKWD7wD3cT83oBJOuMtTXPbqQ\nnh1KW9ZYl0CExAHEhR44MbCw9pJYk4d/buCJPkwS5+NSTE8oKyrGWBPx/yNq\nEFieA3uRz7eW9herpMbjfhrRPNYb85xp0ZqFX9F9GMwV8B3Uml7N8uyFNRJT\neKsWCQjIJeUyBbbL+m4eMSg2pwvc/rhMCGpf8D0vSEYCpP/L+B6uwhuAlzDC\nQy1vl2DWenE+W0zBmF0kE8jhmDLQ7K9TQc8uW6gfDWOSHGQhWj0gP53HAuvk\nHou6I/0pgyFYMfF5ng76IJiLzpVirZbMgBGBJtloU8yf31/zKeUe4n6JfhlU\nftT26nesMUYVLTSWDxztlKsHv3ibmDqYm3CVbfHhw/HF3ZNIUWL2lbnHjBDJ\nkCIxrv6SpuyaebWzVRZtn8lA3IaHlmDWduenf2mb7lJwGRw2fatu0DCmE4pR\nAZD+sgty0pOi+qLhXmObpKasCNTYRpqOayfYWDFwvCmuIhmNqllXuvYnQfEj\nQu8o\r\n=CKei\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNR0pBoTRMYqsy0HymKGsQpdNXkA3PrJDnDv3g86kKZgIgduayu9yZ7jBrJMbfCghOcmn+T9Aooq1YzFK8iVv/QCE="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.1.2_1589980042144_0.12511252377777793"},"_hasShrinkwrap":false},"1.1.3":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.1.3","description":"","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"067a514f159b8b9bb36160231c1dd92c141b4671","_id":"@appannie/ab-testing-hash-object@1.1.3","_nodeVersion":"12.16.3","_npmVersion":"lerna/3.21.0/node@v12.16.3+x64 (linux)","dist":{"integrity":"sha512-2xVCBVYMObimeB6FGXoYKQce0I1yPEPpVCpSAsgd+tF0YsaoPCkCAgq4R8VO+6trzKEL6P6CG2fFWtiuBhRrTg==","shasum":"a2802dc3493ee86036caafa7b3729c8135e0155b","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.1.3.tgz","fileCount":6,"unpackedSize":4249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezMdXCRA9TVsSAnZWagAAZpMP/3/rLTczGxnvAaQnHUu8\nlSyaeykoZfwDJOICwrlVGx6EZJmqO1nR1DI/cIDRPjJ7+j188Aqu3wxdZCAW\ni/BJLUabBuhNkbg6qyHt1KKtspuPf8cfA3WdOAIOY2zMdrIztny2WwMmyarz\nI6KYDZvn2Asc3Vlpcz6PSLWsIoiPficrhiCrvFdYH5iWUs/OqRQr8XU54/Np\nl+BeFx2/XlBI+43gQWRCt/2fHJVmy17kSFYfTc/jG/oRpHjMmQS05DLq6syC\nmLL/EsDoORIhLhs/hrQxXq6wsUfxsHJA6YFwoIFuAcBu6WoMIDgHBJrNCJGP\n17HAFI+6SISSXjZSsxgduQRa42lxvRqWWF9aPs6MXi+Qc2WDeJkNgi4PLkAO\nsEE29tonyoXkwjv6vDYtrbwe1qoGKHwo+HOaFuoVn9i2ODXHbHAsOVJePmMS\nbng9zeYmHE+kKeZHA8KBPCuimpH+YA7EYeh4rNrc29GRfcMTnr+jGEExNHVZ\nk21acqZpZZ+ixg4RYeHZUk/xAoii7d1WMDdO52wjjJzRGZWt+O+8iMVpn8FK\nrcYbWbsOF5MC6yHTQ9/TrScHUMVwCOFtfF/iHy9R5DSSzSWzTdCp7YxS++VE\nEoCEBcIrE1ZS9CvXzv2Hc9zpZJtb64FfQ1YDwnR/Ce+uuY66PLMb9Cv3q3g4\nppDf\r\n=i8/T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG9EThLqCcTlA5RUg7sIaFh1n933dVzytaOv3u2g+fUGAiBPQteePP4HiT+AkHg1AkMEKGO9ejR6zFDWmiwzIO7F+w=="}]},"maintainers":[{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"}],"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.1.3_1590478678544_0.40829207947929946"},"_hasShrinkwrap":false},"1.1.4":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.1.4","description":"","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"d160288b31fa8e572181e920d5ce0df393cd7cbc","_id":"@appannie/ab-testing-hash-object@1.1.4","_nodeVersion":"12.22.1","_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (linux)","dist":{"integrity":"sha512-PqEkiP0poNfZG/W43Uokb54qwDyorvY7NPF1uwUOqlc0lIYJDnlxwIz+Pq+JtL/Fdqqq5D1yn9FsubFhucZ9PA==","shasum":"a78edf47694ac9718f55343e18839c260f5a165a","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.1.4.tgz","fileCount":6,"unpackedSize":4351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi4KzCRA9TVsSAnZWagAAVgYP/iGqqMAofbXsp9xsz2mH\ne2YGBrDi9ZKoDbt4tTcAYWlOA6LHXTbijqisGY5v8/w2u5gIg7OO5oV9f6Hu\nG1fSVxm14Z9YF0xBU0VzkwhrT5xNz6mYDZFFp8ZwuJo6ehsN1gpHYUck1GgW\nB95A+1c8TGit1hUkgPpL0yeNFtSLh7Gm9g0l8V2OgKGEShDEAq+t8tvdJPiL\nll3n3jppFzr1Cv9fhb2bzlWxCjbMFVLA41PzrMYBKcE2zcIAOsX3La5Zwds3\nDCT4npY4c/yf6iib8vHWv47Z3Ge4s9SKXwptrT7CNep4R9raBsjHLAsQ2PSI\nn/+5oqEG4687HntgOmsrPCki5AHWWrSvcgTtL1PX8etYjcoP8DuwlxGRTr4Z\n6NvFDJo1Lxi9KXFg0XLWsAqJF/ogIBZp2XyWpfH6u2vbo1rcJaXgEwc6thSZ\nZ98cv5bFBq1oJ9C5+x5pcxyFvgUjmLuX3QDGTg/OPl6SxTjTc0+CWFENkVg6\nrg4Mx+ibo6+tKZzYbmoUIag/HhWJcQPpIqoseYfmppKr/X6uM5T6I5orZqHp\nQlOc2RYXnsUmI00f3ubeSkCdMHVTz4Uln8Yj5+RUoUZhFQi7kA1zlBNFmzMl\neqhHzfRgtAZOPDv0g2fJIARZbe7oJCXefg3arhD/TR1XB3Ny0nPP0EiQM8Is\nCBrm\r\n=GCyE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNVNGbcgYwlXyZO4MaHooaxdMoUGV23aLd65AnuWfgZAIgKPJtT07R58jfn8PDC7hCkAkUsrAnwEhNYrZr1L/HVWI="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.1.4_1619755699055_0.17946925376874545"},"_hasShrinkwrap":false},"1.1.5":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.1.5","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"8df380403d80787764e58018cc7d2bd5a4193760","_id":"@appannie/ab-testing-hash-object@1.1.5","_nodeVersion":"12.22.1","_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (linux)","dist":{"integrity":"sha512-r7GZ+q9lWnaiyC6E8QfccUmXmOevDk8PCcLv44/o0mxp7o/b9XXP+NPpmc8VrM8RSmWWIvmgdCqVjpSSRzxMaA==","shasum":"2c9bdbef2d9e09100aac076c88652ac1cb0961a5","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.1.5.tgz","fileCount":7,"unpackedSize":19106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkEvqCRA9TVsSAnZWagAA8/MP/3enhs/s3GMVd0uARZGg\nAcnHICvgLgrq3E4B1csIWPDNt3Edl5IRtWxNoikwzLfmRu/P4lMrAYNkFVgW\nU52rQDJmrwZYFRWs/Y1swE/0h3weoFl20HgUnWZGIjqxFJb6JwpWhVjork8Y\nhBRQToOWup5yDoxjTF4XhFNkwRG9wVm/i1gjGvdd+loiGYtUDE6tk8KBvXAe\nxGgT9SD0d+eC5uFrV8bn1cosGgQH1DasSvS/5V5ZmiWRIY9ca5RI5SWeRK0N\nMSe90am08z9jWNytlEhgQS0CiUaDBKzqJAs6mmeAUy2vSFvYJC54cVAcH1sO\nzcky/l68F+1XQrfEAoVX5SKLYoZ61xOQTSrIWUcxMjnjTNBuZe22Xa5Wf6zm\ns1o5FUim0Dlo/f3AzOADd97YaBcAdi9TLREWoYsgyZ/IewgcPNxrK/U9HU4+\neVu9N2p4pSl0Qe1S1z1vX2Nn3udsCLa7Q7G0bFTVql7ukPJMzP91XKz1UnHp\ngYIScPMtRE7eRV5ObXz8c+045gD5YTlTHOOSEM92pw5t4zVKVfk1gH56EVYA\nx8nANbkj+eVQM0f9wQe0GqfiDfGz5xQ+tXurfGvtaHJstRE6s9uY1j7wT2GS\ndyCQocONcVrL8RxfqqIHwgAlmEq5jgSUh6g0JuRDfZv0VBac/wZPWxRb1qYH\n1Z/L\r\n=jqYj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCeWtbO+CV5Azhg3vBZyu2oj7sLRM0Ld+1HwDjOsJkwAiAVeVPRMWQo6xApg+qaL7L+Lm8HdB/IcZa5JxzAiLYSrA=="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.1.5_1620069354333_0.8798240905003483"},"_hasShrinkwrap":false},"1.2.0":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.2.0","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"20870324a161b3a926ed9ddd8bf12350157ea1bc","_id":"@appannie/ab-testing-hash-object@1.2.0","_nodeVersion":"12.22.1","_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (linux)","dist":{"integrity":"sha512-Jth+ivMnRXHbN14TEGipswv9X8gvzLWUBezDSEO5HkzlEbuh/UKPlvAe8W1rjZr0K4Ly3TZKniHCufjYQ/Tc8Q==","shasum":"a5e8500c0c99d75aea43ab99eb69a48d0f46261b","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.2.0.tgz","fileCount":7,"unpackedSize":19207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpFrSCRA9TVsSAnZWagAAhpsP/idV3YCBV5coHA/5EjTq\nsAI1iTCgX3C+NGocQiKOtgb7Jsa2naKf6x3SLVD/U76rkucJB7J143ZfO6Fq\nyGwBFpRyNr+/kml6LVTAXmIdJ5aEHudS/BgVkL4BLBI3y48dOdSv7usM/EbA\nX6lKw/klgeqI0xMcaSyjfM/tMhx9XtrVBVwIiMGTXPSBA5aazRXK1Aojjz0s\nTQ5/e1pUXlitqzYHglKrTRj4rWeQN1DvFP9ANWbk33bwTwN59RYq42mnXF+k\nSq8t8P7nquQ7pdQU4hBBXuDtN3a5ce0d0xv6PYA3Kh0erHIFAQ01PXZAQAez\nmK5Zb9nQHI9aLHhPJ5JBcCEY8hsmaCBBAnZmj5c7W24wdAgOrYPSxVtVXGtT\n5yhWfEOAGABqXd4MiJDQ2cUgSx+vQPYlsp84xo/vmrcxYEsZoSRb28KGdiNM\nt8gSKxZIJ6iqYzNpO0dOjsW/j+E/V+0qXoPFDVTmBvgh10GYzKw7kru6qO5L\nFVg0TB2lIypbjbD6sHQbs+qnkbDosKaSBYgfrukdEc3cBMXO5ZJMqyR2F/X3\nzAFnowuPc/J8W/M5g/u1GwzVLAHsMPFJyhKuuUd2OaaB7Ig17NZL5jRlHiXO\nPQSPVw1Xx0XfCoCYg1XtwbzXOIsnfo36Am7e6nPiKI/FtRwG0J2E9R6/JkTE\nIeZs\r\n=YklF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAna+yY7e/tk3MggsAObVLXjgVVVFLSQ1SmOqJMSQXmKAiA1GMlJch0X9Jw8qBm6z0wiQJx1mHRjtEoKkNW2xcTD3w=="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.2.0_1621383890090_0.714142353938316"},"_hasShrinkwrap":false},"1.2.1":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.2.1","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"2fcbc659fb947790428b4a86ee8198e1a4094f46","_id":"@appannie/ab-testing-hash-object@1.2.1","_nodeVersion":"12.22.1","_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (linux)","dist":{"integrity":"sha512-zpHymaALr3aV8i9092xs+e/nWAk5seh3Ky12vR3lEja3g32pqz6At9B+nWNW0dfJNUCxNVmkNbxWBtcKbXGy5Q==","shasum":"892febd9643d3223c978c9c55d3aed983f93b344","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.2.1.tgz","fileCount":7,"unpackedSize":19309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpF5kCRA9TVsSAnZWagAAIMgP/2QO68ygjrwvtX+kHPID\nDvULQYdUs/4oXHK7sK2ajvhTxKV8VigE+yItSA/cwnhc11ITZSGXF1IZ08A8\nv37VvU+vqwMXiC4OspPC/D4GBhLh69FX/+K6JQLxrd86f/KigHKUwtYdzd8i\nk5GqZtDk0Rr71gsH0Gm+TYSJawDkYoLjR9u4KSKAueMsJ3mXJPzF7+anMZBT\nsN7aAf4vJdD7feMasHCvybZksIcmyndtkpu3fqYuQezosa6Af3zP5mOjpGav\n3jmb0bap12EFkcQo4p3b+hrY212VKPdIwuHNYVQYvX9k3F3QupMSj5Bo1YY3\nJ8uR8oDcC72pYRbf4WtrW/S7u4rtz2PErUr5M5mAUveK23C/obAt5hJzA8Aq\nLMeH2rMCs2ncmAzy34YWJ0IlWYjvmT/Ud6yzJ5EoKZlOBpXAYWCvbYjRB4fh\nLsRmOPNzWC4nKFudaXs2tpKlOjLjf9nHLE/7ZX3RoILgLB7rtJQZRBM1PX9W\nGHkIu8FCih/Bt3SN1hdzDePrMuyvFHiBiOavfMZbZvCZErVh6QqUmSGq9fDC\nVxPWX+Stl+qsJI92UKDLiDNALNOHvg+RyDvn3xGBGcOBa308ZM+9A1yFopRh\nIGTLxusC1cpz/rAqpJCeT5/fgfEMf2HcVOXgfwszizzYwG+brLwxx0NYrjXw\nTNYl\r\n=RnFv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxGMvhX4lvYjX1UrBXCrFwAUB9aMpjMqe/jP0sAOQLvAiAoieDpTEbRni81+YWIEzkMNTtzpRpD7ZTt7lkNXmFV9Q=="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"xunuoi","email":"xunuoi@163.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.2.1_1621384804231_0.6882960509578129"},"_hasShrinkwrap":false},"1.2.2":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.2.2","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"4660c199fb4ea6b7f21ad84d401b0d33e067a818","_id":"@appannie/ab-testing-hash-object@1.2.2","_nodeVersion":"16.7.0","_npmVersion":"lerna/4.0.0/node@v16.7.0+x64 (linux)","dist":{"integrity":"sha512-WXSDQzkGHkBreYpOPYcbWzUMFVUNPlU7Y6KWQPMAAb9qrn9mqT3xu2Zea9+r2DramETQHTrnoBj9Evqo6ubWdA==","shasum":"9b4dd5bcbaa48c90566a438547ecf6e49b7d763a","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.2.2.tgz","fileCount":7,"unpackedSize":19406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJBi1CRA9TVsSAnZWagAARs8P/3Aw1VWGTO7JubeFaJjy\nTS9cYYOVX4HbESQhzT/XXIKkaj/Ytz9beP0V5EZX6y+Ed8Upr22B0kBPvD7x\nDgO1sCgM59Rf5h1FMlPmdPm3ssschdvaYjqlaMJmCfPxRuVTM3W5jFEw8nCg\nRrIIBS9lOFfdRUpZBe2NyjyYXd0dnZeY549OadPBpn0MB+XnQ59YxzmAQZkx\na1Fhuh1gx4hOwmwDUlmLwapfseJbh00N3WAJuEeyyAx1kU+aH/gfAepvqdjr\nIzxhH/LdPEFhMk89b/cqMNp3WF5viarFGeQ28+sqbx9ZEiWmcfeS6yFzCtwZ\nfqpLlOLrXYZ5sFnSAZ83EMZ4Gz7HgVh7RKpSExO+D+03ykMjnRVyJnovsfGC\nY/m5ANyhK/y7FkQ2SJc0bIJMSVKus4kWdG1X38PPEeB+ojiAIue80HqcHupD\n0K+ErlyeqE/xtNiAE7mTGysKkiPc7vaaYeeL4xFlpJ0IBwouP572tCaovPN5\nEtem8/+tXj6l3YFOecsRFVn0RtMAW+Bgy5siKCtwyAEIsD+IkfVfLWFtdmpC\nfSwvK43rx0WZt9Dlf4u91YX77HD1FMVAWKtHXW1qPQq37fSwKZnhX+5uOnl/\nYDbY5xBSgVZSJo1HPxtoOVlcZQbEam1mbDGq4Iqr7e4nKpTKDsCc+mSAnA42\nZOJ6\r\n=J0ry\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGlxo/W610fTTrP1bIHWJawcMWAJtU72HCdYNbNwO6swAiBNAMXAfWEOxnmD5+FrwUI/YCAp5Pw2Jja0veH+vjbmYA=="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.2.2_1629755573742_0.8349593391365182"},"_hasShrinkwrap":false},"1.3.0":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.3.0","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"491a631d53a8f8c1f38dd62c2ae145d057a477dc","_id":"@appannie/ab-testing-hash-object@1.3.0","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","dist":{"integrity":"sha512-gvy0S6b9e8Tc982OTmzcj7q3HaZZD+QCgEc+ukxcu14abfcwhx3iRXLMebF41aYh1s9djDclK8pan7XgqeXW/A==","shasum":"18363468a475b17694a153019c18257c183888a5","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.3.0.tgz","fileCount":7,"unpackedSize":19937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJ8MyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq8Pg/8DiT2o6Xl5U4hKiel9pCvhJjV+d9ljbP6RUwgK7nJeVnURR0t\r\nyxqNsHrsQY4s3Rey+5TWqFsbTPrnARLe00+F34L/Qqvwg7BPVG8dbMZHtV6G\r\n7tvcMF8OKy1PfsY9DwzJ+qlnf5FD+mcUfjmh50e0mDYRarvNn3LWNNpCnouj\r\nwSm7BGCIot4AbuNNwd2V7o99pYX59seMR08nyf8b+vpE9EeqvVWcj5qQxleN\r\n8fbrgLidpACBvGxcTTVTu5hBoGgXW0OBvNEziSQB5/J5RKFBorIi3+tx5BCJ\r\nmNW+StJbIs9y4O4x75ChEUwvgDCxsgjjkLAuAyhJ8LLsLXXMkeQA1SY0LmnH\r\nwuf97sALVEX6rtCRZddvdHOJYu91eMOPvlYLwmRIq1tWfH6TQQQdua2hI0Vc\r\nuYXLL8J/dPjal46H7j+fplVmDTHrBPmPVj6SOlyimUPcZvk7qZYyCkmTqhab\r\nkAcqXvTgvW5GGdfdEinKgvEwUvjPcmL9TEPEgHbXJDmtLX4VVHq4gHiitVIJ\r\nmbuPvqkjityX7RCUVw7oK2iZjjfJAku/CGq4Rzl5/msvpGTUWPR7EgeOEf4b\r\nKHGBYQTZvWeIl+B/d/0eo/SSttVItRm2w/es8uPYQN7llFFbXplP67zZD8g6\r\n0tlE53TfE3TKLieL+vHkh2aqcCH290jYxjg=\r\n=5Rb4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGjSN0T+cU0d/b2JY18RoPdVKxAhc9fMZSfciHM+iZyvAiEA/691bLqmpZW2TVm2dd9iQybkO7CKDWh5BC7IU5Z0meo="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"ramonvillain","email":"ramon.villain@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.3.0_1646773041982_0.26675365329086365"},"_hasShrinkwrap":false},"1.3.1":{"name":"@appannie/ab-testing-hash-object","license":"MIT","publishConfig":{"access":"public"},"version":"1.3.1","description":"<!-- TOC -->","private":false,"main":"lib/index.js","typings":"lib/index.d.ts","scripts":{"build":"tsc --pretty && cp src/*.flow lib/"},"keywords":[],"dependencies":{"create-hash":"^1.2.0"},"gitHead":"42785877177ac14c4a5bb2cebb2a68ec962ba4ac","_id":"@appannie/ab-testing-hash-object@1.3.1","_nodeVersion":"16.14.0","_npmVersion":"lerna/4.0.0/node@v16.14.0+x64 (linux)","dist":{"integrity":"sha512-UqHLokBJ+3AG7QihOFDhfad4IG7U0qlgxsD+e+9TaS9gB0mb28Dk272+S3/XR2623GQR9r44B07G5MAX67gHUQ==","shasum":"90c90a1095d3e76ed9d8182be5eac5b1822181c0","tarball":"https://registry.npmjs.org/@appannie/ab-testing-hash-object/-/ab-testing-hash-object-1.3.1.tgz","fileCount":8,"unpackedSize":21065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKq1bACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoIUg/9GVMFs7F6wZR9ep9ldUEBrP+SWV5KzgSZGcurJiYUqese0a8E\r\npfTTEsBK/dDPnsgzJLmNzswpMTgNN84ZAcBVLwqnbKaVn7layNbvieIb54lG\r\nnEmBfqaiu8+zVe9jgTWDF9zZN1b4Of82/cC3kJ85tpueKNp55fHEbr8WquPT\r\nr7xGBYZdb9UzK19LTndhTzUkoj7k6dOmEh0ze0Og3obqBz1pW1Eo8cO9F2lC\r\n79VuzOsg1xM27qC/oprvYcWF80N7YsFU4kva4BrPUa0AtZQ1NAzl9Uy6r9Vg\r\nBC+NgrJrquDKjCEpK8e7GWcNdwodZ2tJwZJmsXuFi5I6B4BBuNAED1WokYGD\r\nCgo+FZqM3x83YebmArlv4osv+pGOb9IKhs0sn9F4OjFodULLinbj5GeLObpn\r\n/5FbgueB5fJ8DGA2MyprPycYRvV5LWxbhCPHEk67DMaTXAZnH67+DNwNaitS\r\njaphScJiq9/kkWbatgobnaUUuXgrpIsNsfSC7IFpaTSYBYWbZOv0oGG0xRkQ\r\n6wKpmZ65ajQEaqpaOEYbtagbJ/RkRD/HDpFdQF12Dl4D3849my5gV437w1Ni\r\n8mt0dzeVswyJ4xDpz3wO+UPg3nvCgi2QagzXnxmyfYWM2lokrePHJo4gqSG6\r\nvK3v3yc3GT3VLPxPfmD35hFq9QB2MqjxSK8=\r\n=vNN+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIALHB5zmGME57W/qwz7jW4qZC3vmGYDXSUORkrTAVprrAiBjghVEk+v/LD3ojkXDBQNR9ridfxrHCAwIlCDIbCwdLw=="}]},"_npmUser":{"name":"sboudrias","email":"admin@simonboudrias.com"},"directories":{},"maintainers":[{"name":"ramonvillain","email":"ramon.villain@gmail.com"},{"name":"sboudrias","email":"admin@simonboudrias.com"},{"name":"jiuyue","email":"monopieces@gmail.com"},{"name":"aanpmjs","email":"accounts+npmjs@appannie.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ab-testing-hash-object_1.3.1_1646964059562_0.2902002510865873"},"_hasShrinkwrap":false}},"time":{"created":"2020-02-19T07:38:51.272Z","1.0.1":"2020-02-19T07:38:51.523Z","modified":"2023-02-13T09:55:25.584Z","1.0.3":"2020-02-20T03:22:09.650Z","1.0.5":"2020-02-26T02:52:43.206Z","1.1.0":"2020-03-11T09:25:51.272Z","1.1.1":"2020-03-18T00:59:07.585Z","1.1.2":"2020-05-20T13:07:22.258Z","1.1.3":"2020-05-26T07:37:58.705Z","1.1.4":"2021-04-30T04:08:19.240Z","1.1.5":"2021-05-03T19:15:54.449Z","1.2.0":"2021-05-19T00:24:50.224Z","1.2.1":"2021-05-19T00:40:04.394Z","1.2.2":"2021-08-23T21:52:53.883Z","1.3.0":"2022-03-08T20:57:22.161Z","1.3.1":"2022-03-11T02:00:59.753Z"},"maintainers":[{"email":"ramon.villain@gmail.com","name":"ramonvillain"},{"email":"monopieces@gmail.com","name":"jiuyue"},{"email":"accounts+npmjs@appannie.com","name":"aanpmjs"}],"keywords":[],"license":"MIT","readme":"<!-- TOC -->\n\n- [AB Testing](#ab-testing)\n- [Terms](#terms)\n- [Package API References](#package-api-references)\n  - [For React: `@appannie/react-ab-testing`](#for-react-appanniereact-ab-testing)\n    - [Installation](#installation)\n    - [Usage](#usage)\n  - [For Vanilla Javascript: `@appannie/ab-testing`](#for-vanilla-javascript-appannieab-testing)\n    - [Installation](#installation-1)\n    - [Usage](#usage-1)\n  - [Javascript Hashing Utils `@appannie/ab-testing-hash-object`](#javascript-hashing-utils-appannieab-testing-hash-object)\n    - [Installation](#installation-2)\n    - [Usage](#usage-2)\n  - [For Python: `py-ab-testing`](#for-python-py-ab-testing)\n    - [Installation](#installation-3)\n    - [Usage](#usage-3)\n    - [Configration Hashing](#configration-hashing)\n      - [Prepare config file BEFORE make it public](#prepare-config-file-before-make-it-public)\n      - [In runtime](#in-runtime)\n- [Configuration File Reference](#configuration-file-reference)\n  - [Configuration File Hashing and Protecting private information](#configuration-file-hashing-and-protecting-private-information)\n  - [Example configuration and common use case](#example-configuration-and-common-use-case)\n    - [Excluding a user from an experiment](#excluding-a-user-from-an-experiment)\n    - [Internal whitelist](#internal-whitelist)\n- [Credits](#credits)\n\n<!-- /TOC -->\n\n# AB Testing\n\n[![CI](https://github.com/appannie/ab-testing/workflows/CI/badge.svg)](https://github.com/appannie/ab-testing/actions?query=workflow%3ACI)\n[![Coverage Status](https://coveralls.io/repos/github/appannie/ab-testing/badge.svg)](https://coveralls.io/github/appannie/ab-testing)\n[![GitHub Release Date](https://img.shields.io/github/release-date/appannie/ab-testing)](https://github.com/appannie/ab-testing/releases)\n\nThe AB Testing library implements multi-variance testing with a deterministic algorithm. It doesn't require any complex backend or database. Supporting both Javascript and Python.\n\nThe AB Testing library segmentating users under different \"[cohorts](#terms)\", so you could use an `if-else`-like statement to implement different features base on the segmentation.\n\nThere're 2 ways of segmentation:\n\n1. Percentage based segmentation: Randomly allocate certain percent of user to a \"[cohort](#terms)\". The allocation algorithm guarantees to produce stable results within a single [experiment](#terms), and produce a different set of users for another [experiment](#terms) in a random way. You can also further filter the user set using the key `allocation_criteria`. Take a look at this example: `first 25% users`, it will always result into the same group of users in [experiment](#terms) `A`, but results in another completely different group of users for [experiment](#terms) `B`.\n2. User profile based segmentation: Manually assign a specific group of users to a cohort. This can be used to achieve features like \"expose a new feature to the company emplyees for internal testing\". Note the profile based segmentation works independently from the percentage based method. They doesn't interfere each other.\n\nThe segmentation decisions are made base on a configuration file. The file should be `json` formated and hosted centralized place. More details about the configuration file below.\n\nThe config file can be optionaly [hashed](#Configuration-File-Hashing-and-Protecting-private-information) so the content is not reversable. In this case you can host the file publicly, for example, on you CDN server, or in a publich S3 bucket.\n\n# Terms\n\n**Experiment**: A subject that you want to do ab-testing with. You can have multiple experiments on going at the same time, the library can handle them independently.\n\n**Cohort**: Inside an experiment, users are classified into groups. The groups are called Cohorts.\n\n**`control`**: The name of the default cohort. Which is, the cohort returned when the user doesn't matche any rule on any cohorts, or the experiment just doesn't exists.\n\n# Package API References\n\n## For React: `@appannie/react-ab-testing`\n\n[![npm (scoped)](https://img.shields.io/npm/v/@appannie/react-ab-testing)](https://www.npmjs.com/package/@appannie/react-ab-testing)\n[![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@appannie/react-ab-testing)](https://www.npmjs.com/package/@appannie/react-ab-testing)\n[![npm](https://img.shields.io/npm/dw/@appannie/react-ab-testing)](https://www.npmjs.com/package/@appannie/react-ab-testing)\n\nReact binding for the vanilla Javascript package, featuring similar functionality.\n\n### Installation\n\n```sh\nnpm install @appannie/react-ab-testing\n# or\nyarn add @appannie/react-ab-testing\n```\n\n### Usage\n\nWrap your app with the `ABTestingController`\n\n```js\nimport { ABTestingController } from '@appannie/react-ab-testing';\n\nconst MyApp = ({ user }) => {\n    const profile = {\n        persona: user.persona,\n        employee: user.isEmployee,\n    };\n\n    return (\n        <ABTestingController config={testConfig} userId={user.id} userProfile={profile}>\n            <App />\n        </ABTestingController>\n    );\n};\n```\n\nThe required props are:\n\n1. `config`: the configuration object.\n2. `userId`: a unique identifier for your current user. This ID should be the same across visits to make sure your user always end up in the same cohorts. It can a `string` or a `number`.\n3. `userProfile`: a key/value map used to force include a user in given cohorts.\n\nThen within your app, check the cohort a user is assigned to using the `useCohortOf` hook.\n\n```js\nimport { useCohortOf } from '@appannie/react-ab-testing';\n\nconst Component = () => {\n    const cohort = useCohortOf('experiment-name');\n\n    switch (cohort) {\n        case 'blue':\n            return <BlueButton />;\n        case 'red':\n            return <RedButton />;\n        // 'control' is the default cohort. All experiments have a control cohort.\n        case 'control':\n        default:\n            return <Default />;\n    }\n};\n```\n\n## For Vanilla Javascript: `@appannie/ab-testing`\n\n[![npm (scoped)](https://img.shields.io/npm/v/@appannie/ab-testing)](https://www.npmjs.com/package/@appannie/ab-testing)\n[![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@appannie/ab-testing)](https://www.npmjs.com/package/@appannie/ab-testing)\n[![npm](https://img.shields.io/npm/dw/@appannie/ab-testing)](https://www.npmjs.com/package/@appannie/ab-testing)\n\nCore Javascript package that implementing ab-testing SDK APIs.\n\n### Installation\n\n```sh\nnpm install @appannie/ab-testing\n# or\nyarn add @appannie/ab-testing\n```\n\n### Usage\n\n```js\nimport { Experiments } from '@appannie/ab-testing';\n\nconst profile = {\n    persona: user.persona,\n    employee: user.isEmployee,\n};\n\nconst experiments = new Experiments(config, user.id, profile);\nconst cohort = experiments.getCohort('experiment-name');\n\nswitch (cohort) {\n    case 'blue':\n        console.log('user in the blue cohort');\n        break;\n    case 'red':\n        console.log('user in the red cohort');\n        break;\n    // 'control' is the default cohort. All experiments have a control cohort.\n    case 'control':\n    default:\n        console.log('user in the control (default) cohort');\n        break;\n}\n```\n\n## Javascript Hashing Utils `@appannie/ab-testing-hash-object`\n\n[![npm (scoped)](https://img.shields.io/npm/v/@appannie/ab-testing-hash-object)](https://www.npmjs.com/package/@appannie/ab-testing-hash-object)\n[![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@appannie/ab-testing-hash-object)](https://www.npmjs.com/package/@appannie/ab-testing-hash-object)\n[![npm](https://img.shields.io/npm/dw/@appannie/ab-testing-hash-object)](https://www.npmjs.com/package/@appannie/ab-testing-hash-object)\n\nAn helper library that implements hashing for the configurations (user profile and the configuration `force_include` section) in case you want to host the config file publicly but still keep the content private, or just don't want to leave PIIs been transmitted in plain text.\n\nThe hashing algorithm used is `sha256`, and we're using a universal implementation ([`create-hash`](https://www.npmjs.com/package/create-hash)) that'll work both in Node and the browser.\n\n### Installation\n\n```sh\nnpm install @appannie/ab-testing-hash-object\n# or\nyarn add @appannie/ab-testing-hash-object\n```\n\n### Usage\n\n```js\nimport { hashObject } from '@appannie/ab-testing-hash-object';\n\nconst profile = hashObject(\n    {\n        persona: user.persona,\n        employee: user.isEmployee,\n    },\n    salt\n);\n\nconst forceIncludeCondition = hashObject(\n    {\n        persona: ['data analyst'],\n        employee: ['yes'],\n    },\n    salt\n);\n```\n\nYou'll want to make sure the salt is the same on your server and your client for the encoding result to be the same.\n\n## For Python: `py-ab-testing`\n\n[![PyPI](https://img.shields.io/pypi/v/py-ab-testing)](https://pypi.org/project/py-ab-testing/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py-ab-testing)](https://pypi.org/project/py-ab-testing/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dw/py-ab-testing)](https://pypi.org/project/py-ab-testing/)\n\nPython implementation for the same APIs in `@appannie/ab-testing` and `@appannie/ab-testing-hash-object`\n\n### Installation\n\n```sh\npip install py-ab-testing\n# or\npipenv install py-ab-testing\n```\n\n### Usage\n\nNote: The `config` variable holds an `dict` with [configuration file format that documented here](#configuration-file-reference).\n\n```python\nfrom ABTesting import ABTestingController\n\nuser_profile = {\n    'persona': user.persona,\n    'employee': user.isEmployee,\n}\n\ncontroller = ABTestingController(config, user.id, user_profile)\ncohort = controller.get_cohort('experiment-name')\n\nif cohort == 'blue':\n    do_something()\nelif cohort == 'red':\n    do_something_else()\nelse:\n    do_default_behavior()\n```\n\n### Configration Hashing\n\nSimilar to the Javascript SDKs, the package comes with an optional util for hashing private information with `sha256`.\n\n#### Prepare config file BEFORE make it public\n\n```python\nfrom ABTesting.utils import hash_dict\n\nconfig['salt'] = salt\nfor experiment in config['experiments']:\n    for cohort in experiment['cohorts']:\n        cohort['force_include'] = hash_dict(cohort['force_include'], salt)\n```\n\n#### In runtime\n\n```python\nfrom ABTesting.utils import hash_dict\n\nhashed_user_profile = hash_dict(\n    {\n        'persona': user.persona,\n        'employee': user.isEmployee,\n    },\n    salt\n)\n\n# Make sure config is hashed with the same salt\ncontroller = ABTestingController(config, user.id, hashed_user_profile)\n```\n\n# Configuration File Reference\n\n```js\n{\n    // The version isn't used right now, it is used to allow potentially breaking configuration\n    // change in the future. Current version is \"1.0\"\n    version: \"1.0\",\n\n    experiments: [\n        {\n            // Unique name used to refer to an experiment; used within `useCohortOf`\n            name: 'experiment-name',\n            cohorts: [\n                {\n                    // Name of a cohort. These are the values returned by `useCohortOf`\n                    name: 'blue',\n\n                    // The force_include section is used to force users into given cohorts if their\n                    // userProfile key. In many keys are used, *any* match will force include the user in\n                    // the cohort.\n                    // The force_include rules are checked in the order of the cohorts in the array and\n                    // the first match wins.\n                    // This section is optional.\n                    force_include: {\n                        persona: [\n                            'data analyst'\n                        ]\n                    },\n\n                    // The users are allocated to values in a range of 0 to 100. The allocation config\n                    // represents the slice of users allocated to a cohort. You can have multiple\n                    // allocation ranges.\n                    // Every range needs to be unique and not overlap other ranges in any other cohort.\n                    allocation: [\n                        [0, 25]\n                    ],\n                    // The allocation_criteria key allows us to further filter the set of users by enforcing \n                    // a criteria that must be valid before the cohort is approved. In this case, \n                    // the user must have an email domain of data.ai or appannie.com.\n                    allocation_criteria: {\n                        email_domain: ['appannie.com', 'data.ai']\n                    }\n                },\n                {\n                    // \"control\" is the default cohort. All experiments always have a control cohort.\n                    // All users not allocated to other cohorts will be assigned to \"control\" by default.\n                    name: 'control'\n                },\n            ]\n        }\n    ]\n}\n```\n\nAt Data AI, we're maintaining this configuration in yaml format to reduce the syntax noise. We have an automated CI task to encode/encrypt and push the final configuration to a public S3 bucket from where our SDK retrieve the configuration.\n\n## Configuration File Hashing and Protecting private information\n\nYou shouldn't list user [private information (PII)](https://csrc.nist.gov/glossary/term/PII) within the configuration file as these are most likely public.\n\nIf you need to segment users using emails or information you wish/need to keep private, we suggest you to securely encrypt them.\n\nWe're providing an extra module `@appannie/ab-testing-hash-object` aiming to simplify this flow. This module will encode the keys and the values of your user profile. You then need to call it with the same `salt` while preprocessing your configuration and once when defining the user profile:\n\n```js\nimport { hashObject } from '@appannie/ab-testing-hash-object';\n\nconst profile = hashObject(\n    {\n        persona: user.persona,\n        employee: user.isEmployee,\n    },\n    config.salt\n);\n```\n\n## Example configuration and common use case\n\n### Excluding a user from an experiment\n\nYou can do this by force including a user or a group of users in the `control` cohort.\n\n```yaml\nexperiments:\n    - name: my_experiment\n      cohorts:\n          - name: control\n            force_include:\n                # Here we'd prevent any google.com users from seeing the experiment\n                email_domain:\n                    - google.com\n          - name: cohort_A\n            allocation:\n                - [0, 10]\n```\n\n### Internal whitelist\n\nForce include users with `email_domain` equal to `appannie.com` under the desired cohort.\n\n```yaml\nexperiments:\n    - name: my_experiment\n      cohorts:\n          - name: control\n          - name: cohort_A\n            force_include:\n                # Force all Data AI user under the given cohort\n                email_domain:\n                    - appannie.com\n```\n\n# Credits\n\nMade with ❤️ by [Zhang Tao](https://github.com/ZigZagT) and [Simon Boudrias](https://github.com/SBoudrias) from the Data AI Beijing office.\n\nAvailable for public use under the MIT license.\n","readmeFilename":"README.md","description":"<!-- TOC -->"}